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?
Alpine é uma distro de dor de cabeça para a maioria dos pacotes Python que enviam extensões C/C++ (código escrito em C/C++ que é compilado para um objeto compartilhado e carregado em Python por meio de uma biblioteca de função externa). A razão para isso é que é PEP 513 , cuja definição de portabilidade entre distribuições Linux,
manylinux1
, é baseada em glibc/glibcxx. Como a Alpine usa musl libc, nenhumamanylinux1
roda compatível pode ser instalada na Alpine. Então, quando você emitepip install cryptography
, a roda com as extensões compiladas é filtrada epip
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 não precisar da versão de ponta do pacote. A Alpine oferece o
cryptography
pacote pré-construído , atualmente é ocryptography<=2.1.4
. Instale-o comapk
:instalando com pip
Se você precisar da versão de ponta, tente criá-la a partir da fonte instalando com
pip
.Preparando o ambiente de compilação
Você precisará do compilador e das bibliotecas com arquivos de cabeçalho: musl, OpenSSL, libffi e o próprio Python:
Prédio
pip install pkgname
oculta o log de compilação por padrão. Para ver o log de compilação completo, adicione-vvv
para aumentar a verbosidade. (Opcional) Além disso, você pode proibir explicitamente a instalaçãomanylinux1
de rodas adicionando--no-binary=pkgname
para que a compilação da fonte seja aplicada.