
Estoy experimentando con Alpine-Linux y no funciona como se esperaba.
Intento usarlo pip install cryptography
, pero tarda una eternidad y se detiene en este resultado incomprensible.
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
¿Qué puedo hacer al respecto?
Respuesta1
Alpine es una distribución que genera dolor de cabeza para la mayoría de los paquetes de Python que incluyen extensiones C/C++ (código escrito en C/C++ que se compila en un objeto compartido y se carga en Python a través de una biblioteca de funciones externa). La razón de esto es que esPEP 513cuya definición de portabilidad entre distribuciones de Linux manylinux1
se basa en glibc/glibcxx. Dado que Alpine utiliza musl libc, no manylinux1
se puede instalar ninguna rueda compatible en Alpine. Entonces, cuando emite pip install cryptography
, la rueda con las extensiones compiladas se filtra e pip
intenta compilar el paquete con todas las extensiones C desde el código fuente.
instalar con el administrador de paquetes del sistema
Esta es la forma preferida y @GracefulRestart la mencionó en los comentarios; Úselo si no necesita la versión más avanzada del paquete.Alpine ofrece el cryptography
paquete prediseñado, actualmente es el cryptography<=2.1.4
. Instálalo con apk
:
$ apk add py-cryptography
instalando con pip
Si necesita la versión más avanzada, puede intentar compilarla desde el código fuente instalándola con pip
.
Preparando el entorno de construcción
Necesitará el compilador y las bibliotecas con archivos de encabezado: musl, OpenSSL, libffi y el propio Python:
$ apk add gcc musl-dev libffi-dev openssl-dev python3-dev
Edificio
pip install pkgname
Oculta el registro de compilación de forma predeterminada. Para ver el registro de compilación completo, agréguelo -vvv
para aumentar la detalle. (Opcional) Además, puede prohibir explícitamente la instalación manylinux1
de ruedas agregando --no-binary=pkgname
para que se aplique la compilación desde el código fuente.
$ pip install cryptography -vvv --no-binary=cryptography