
Estou experimentando o Alpine-Linux e não está funcionando como esperado.
Eu tento usar pip install cryptography
, mas demora uma eternidade e para nessa saída incompreensível
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
O que posso fazer sobre isso?
Responder1
Alpine é uma distribuição que causa dor de cabeça para a maioria dos pacotes Python que fornecem extensões C/C++ (código escrito em C/C++ que é compilado em um objeto compartilhado e carregado em Python por meio de uma biblioteca de funções estrangeira). A razão para isso é quePEP 513cuja definição de portabilidade entre distribuições Linux manylinux1
é baseada em glibc/glibcxx. Como o Alpine usa musl libc, nenhuma manylinux1
roda compatível pode ser instalada no Alpine. Então quando você emite pip install cryptography
, a roda com as extensões compiladas é filtrada e pip
tenta construir o pacote com todas as extensões C do código-fonte.
instalando com o gerenciador de pacotes do sistema
Esta é a forma preferida e foi mencionada por @GracefulRestart nos comentários; use-o se você não precisar da versão mais recente do pacote.Alpine oferece o cryptography
pacote pré-construído, atualmente é o cryptography<=2.1.4
. Instale-o com apk
:
$ apk add py-cryptography
instalando com pip
Se você precisar da versão mais recente, você pode tentar construí-la a partir do código-fonte instalando com pip
.
Preparando o ambiente de construção
Você precisará do compilador e das bibliotecas com arquivos de cabeçalho: musl, OpenSSL, libffi e o próprio Python:
$ apk add gcc musl-dev libffi-dev openssl-dev python3-dev
Prédio
pip install pkgname
oculta o log de construção por padrão. Para ver o log de compilação completo, adicione -vvv
para aumentar o detalhamento. (Opcional) Além disso, você pode proibir explicitamente a instalação manylinux1
de rodas adicionando --no-binary=pkgname
para que a compilação da fonte seja aplicada.
$ pip install cryptography -vvv --no-binary=cryptography