Einige der Anforderungen.txt-Python-Abhängigkeiten können nicht installiert werden

Dec 27 2020

Ich kann nicht herausfinden, warum ich mich bei der Installation meiner Python-Abhängigkeiten von require.txt pip nicht beschwere, aber wenn ich es vom Docker-Container aus mache, wird die folgende Fehlermeldung angezeigt:

Die Anforderungen.txt Inhalt:

Flask~=1.1
grpcio
grpcio-tools
protobuf
iexfinance
numpy
pandas
pandas_datareader
pymongo

Ich habe meinen Container wie folgt erstellt:

docker run -it -p 8080:50051 -v ${pwd}:/app -w "/app" python:3.8-alpine

Ich habe versucht, meine Abhängigkeiten mit diesem Befehl zu installieren:

pip install -r requirements.txt

Unten ein Screenshot:

Antworten

2 jakub Dec 27 2020 at 04:59

Alpine Linux verwendet musl C, aber die meisten Python Wheel-Dateien sind für glib C kompiliert. Daher müssen Pakete mit in C / C ++ geschriebenen Erweiterungen kompiliert werden. Wenn Sie keinen Compiler installiert haben, wird eine Fehlermeldung angezeigt.

Anstatt einen Compiler und Abhängigkeiten zu installieren, die Pakete zur Kompilierungszeit möglicherweise benötigen, empfehle ich die Verwendung eines Python Docker-Images, das nicht auf Alpine basiert. Beispielsweise können Sie python:3.8-slimoder verwenden python:3.8, und Python-Pakete, die Linux-Räder liefern, müssen nicht kompiliert werden. Alle in OPs aufgeführten Pakete requirements.txtkönnen bei Verwendung von vorkompilierten Rädern installiert werden python:3.8-slim.

Sie können diese Befehle also verwenden

docker run -it -p 8080:50051 -v ${pwd}:/app -w "/app" python:3.8-slim
pip install -r requirements.txt

Wenn Sie über die Größe des resultierenden Bildes betroffen sind, können Sie auch die Verwendung --no-cache-dirFlag in pip installzu deaktivieren Caching.

MselmiAli Dec 27 2020 at 05:00

Die Lösung bestand darin, das alpine SDK zu aktualisieren, bei dem es sich um ein "Metapaket" handelt, das die wesentlichen Pakete enthält, die zum Erstellen neuer Pakete verwendet werden. "

apk add --update alpine-sdk

Ich habe hier die Lösung gefunden:

Github: Docker Alpenprobleme