Python

alpine-linux 命令需要很長時間

  • June 3, 2018

我正在嘗試使用 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

$ apk add py-cryptography

用 pip 安裝

如果您需要最前沿的版本,您可以嘗試通過安裝pip.

準備建構環境

您將需要帶有標頭檔的編譯器和庫:musl、OpenSSL、libffi 和 Python 本身:

$ apk add gcc musl-dev libffi-dev openssl-dev python3-dev

建造

pip install pkgname預設隱藏建構日誌。要查看完整的建構日誌,請添加-vvv以增加詳細程度。(可選)此外,您可以通過添加明確禁止安裝manylinux1輪子,--no-binary=pkgname以便強制執行從原始碼建構。

$ pip install cryptography -vvv --no-binary=cryptography

引用自:https://unix.stackexchange.com/questions/446618