Alpine é uma distro para a maioria dos pacotes Python que trazem 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ções externas). A razão para isso é que é PEP 513 que definição de portabilidade entre distribuições Linux, manylinux1
, é baseado em glibc / glibcxx. Como a Alpine usa musl libc, nenhuma roda compatível manylinux1
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 a partir do código-fonte.
instalando com o gerenciador de pacotes do sistema
Este é o caminho preferido e foi mencionado por @GracefulRestart nos comentários; use-o se você não precisar da versão de ponta do pacote. A Alpine oferece o pacote cryptography
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 de ponta, tente construí-la a partir do código-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:
$ apk add gcc musl-dev libffi-dev openssl-dev python3-dev
Construindo
pip install pkgname
oculta o log de construção por padrão. Para ver o log de construção completo, adicione -vvv
para aumentar a verbosidade. (Opcional) Além disso, você pode proibir explicitamente a instalação de manylinux1
wheels adicionando --no-binary=pkgname
para que a compilação da origem seja aplicada.
$ pip install cryptography -vvv --no-binary=cryptography