我正在尝试使用 alpine-linux,但它没有按预期工作。
我尝试使用pip install cryptography
,但它需要永远并停止在这个难以理解的输出
Running command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-h925mzyj/cryptography/setup.py';f=getattr(tokenize, 'open', open)(__f
le__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-gdaazboj --python-tag cp36
我能做些什么呢?
对于大多数提供 C/C++ 扩展(用 C/C++ 编写的代码,编译为共享对象并通过外部函数库在 Python 中加载)的大多数 Python 包来说,Alpine 是一个令人头疼的发行版。原因是PEP 513,它在 Linux 发行版之间的可移植性定义
manylinux1
基于 glibc/glibcxx。由于 Alpine 使用 musl libc,因此manylinux1
在 Alpine 上无法安装兼容的轮子。因此,当您发出时pip install cryptography
,带有已编译扩展的轮子会被过滤并pip
尝试使用源代码中的所有 C 扩展构建包。使用系统包管理器安装
这是首选方式,@GracefulRestart 在评论中提到过;如果您不需要软件包的前沿版本,请使用它。Alpine 提供预建
cryptography
包,目前是cryptography<=2.1.4
. 安装它apk
:用 pip 安装
如果您需要最前沿的版本,您可以尝试通过安装
pip
.准备构建环境
您将需要带有头文件的编译器和库:musl、OpenSSL、libffi 和 Python 本身:
建造
pip install pkgname
默认隐藏构建日志。要查看完整的构建日志,请添加-vvv
以增加详细程度。(可选)此外,您可以通过添加明确禁止安装manylinux1
轮子,--no-binary=pkgname
以便强制执行从源代码构建。