
Я экспериментирую с 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
Что я могу с этим сделать?
решение1
Alpine — это головная боль для большинства пакетов Python, которые поставляют расширения C/C++ (код, написанный на C/C++, который компилируется в общий объект и загружается в Python через стороннюю библиотеку функций). Причина этого в том, чтоПЭП 513определение переносимости между дистрибутивами Linux, manylinux1
, основано на glibc/glibcxx. Поскольку Alpine использует musl libc, manylinux1
на Alpine нельзя установить совместимый wheel. Поэтому при запуске pip install cryptography
wheel со скомпилированными расширениями фильтруется и 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
wheels, добавив --no-binary=pkgname
, чтобы сборка из исходного кода была принудительной.
$ pip install cryptography -vvv --no-binary=cryptography