
Ich experimentiere mit Alpine-Linux und es funktioniert nicht wie erwartet.
Ich versuche es zu benutzen pip install cryptography
, aber es dauert ewig und endet bei dieser unverständlichen Ausgabe
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
Was kann ich tun?
Antwort1
Alpine ist eine Distribution, die Kopfschmerzen bereitet, wenn die meisten Python-Pakete C/C++-Erweiterungen enthalten (in C/C++ geschriebener Code, der in ein gemeinsames Objekt kompiliert und über eine externe Funktionsbibliothek in Python geladen wird). Der Grund dafür ist, dassPEP 513Diese Portabilitätsdefinition zwischen Linux-Distributionen manylinux1
basiert auf glibc/glibcxx. Da Alpine musl libc verwendet, manylinux1
kann auf Alpine kein kompatibles Wheel installiert werden. Wenn Sie also ausgeben pip install cryptography
, wird das Wheel mit den kompilierten Erweiterungen gefiltert und pip
versucht, das Paket mit allen C-Erweiterungen aus dem Quellcode zu erstellen.
Installation mit dem Systempaketmanager
Dies ist die bevorzugte Methode und wurde von @GracefulRestart in den Kommentaren erwähnt; verwenden Sie sie, wenn Sie nicht die neueste Version des Pakets benötigen.Alpine bietet das vorgefertigte cryptography
Paket, derzeit ist es das cryptography<=2.1.4
. Installieren Sie es mit apk
:
$ apk add py-cryptography
Installieren mit pip
Wenn Sie die neueste Version benötigen, können Sie versuchen, sie aus dem Quellcode zu erstellen, indem Sie sie mit installieren pip
.
Vorbereiten der Build-Umgebung
Sie benötigen den Compiler und die Bibliotheken mit Header-Dateien: musl, OpenSSL, libffi und Python selbst:
$ apk add gcc musl-dev libffi-dev openssl-dev python3-dev
Gebäude
pip install pkgname
blendet das Build-Protokoll standardmäßig aus. Um das vollständige Build-Protokoll anzuzeigen, fügen Sie hinzu, -vvv
um die Ausführlichkeit zu erhöhen. (Optional) Sie können die Installation von manylinux1
Wheels auch explizit verbieten, indem Sie hinzufügen --no-binary=pkgname
, damit der Build aus der Quelle erzwungen wird.
$ pip install cryptography -vvv --no-binary=cryptography