Verteilen installierter/kompilierter Module mit seinen Abhängigkeiten

Probleme bei der Installation?
Antworten
siless
User
Beiträge: 2
Registriert: Donnerstag 15. Februar 2018, 11:32

Hallo liebe Gemeinde,

ich weiss nicht ob das Problem oder diese Herausforderung schon mal jemand hatte, doch ich hatte schon mal bei google etwas nachgeblättert wollte aber mal die deutsche Gemeinde dazu befragen.

Ich habe folgendes Problem. Der Rechner auf dem ich arbeite ist hinter einem Proxy. Jetzt kommt es vor das ich über pip einige .tar oder .whl installieren kann. Aber es kommt auch vor das nur die source Dateien bei pypi vorhanden sind und ggf über pip abhängigkeiten nachinstalliert werden müssen. Jedoch sperrt unser Proxy viele Anfragen. Ich weiss auch nicht ob der Proxy daran schuld ist oder mein Rechner, zumindest kommt immer die Fehlermeldung wenn ich pip<X> install <package> nutze
  • ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection.....
Wenn einmal ein .whl Packet installiert wurde kann ich es zumindest über pip install ansprechen und er sagt es sei auf dem aktuellsten Stand. urllib3 ist ebenso schon installiert. Also meiner Meinung nach kann es daran nicht liegen.

Ich habe schon über pip die Proxy-Option und --trusted-host angegeben und auch verschiedene pip-Versionen getestet, doch nichts half. Jetzt kam ich dann auf die Idee, da wir einen umbeschränkten Rechner haben, das jeweilige Modul zu installieren ggf compilieren und Abhänigkeiten installieren zu lassen. Dann aus den site-packages alles auf meinen Rechner zu kopieren. Doch diverse Hinweise raten davon ab dies zu tun.

Dann kam ich auf die Idee ob es die Möglichkeit gibt das jeweilige package mit all seinen Abhängigkeiten über ein eigenes setuptool bzw. egg oder ähnliches zu erstellen.

Gibt es solch eine Möglichkeit installierte/compilierte site-packages nochmal als package mit seinen Abhängigkeiten zu verpacken und auf einem beschränkten Rechner zu installieren und wie muss ich da vorgehen ?
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt den weg ueber pip freeze und pip download. Mit ersterem erzeugst du eine Datei (ueblicherweise requirements.txt genannt) die alle installierten Pakete benennt. Du kannst also auf deinem unbeschraenkten Rechner ein virtualenv erzeugen, darin das gewuenschte Paket installieren, und mit pip freeze bekommst du die Liste all der benoetigten Pakete.

Und mit pip download kannst du dann eben diese Pakete explizit herunterladen. Die solltest du dann auf deinen Zielrechner bewegen & dort ganz normal mit pip installieren koennen.

Nachtrag: und es ist mit ziemlicher Sicherheit dein Proxy der daran Schuld ist. Vielleicht solltest du auch mal eurem Admin auf die Fuesse steigen, denn sowas sollte nicht sein.
siless
User
Beiträge: 2
Registriert: Donnerstag 15. Februar 2018, 11:32

Hat alles geklappt. Ich habe einen Test durchgeführt und die Pakete wurden als wheel heruntergeladen. Ich bin mir nicht sicher wie es ist wenn die Pakete nicht als wheel vorliegen doch das ist dann später ein anderes Problem
Für Interessierte die es auch nötig haben sollten wie folgt vorgehen.

pip download -d <Speicherort> <package>

Alle Abhängigkeiten des <package> werden dann ebenso im angegeben Speicherort einzeln abgelegt.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ich würde dir empfehlen ein wheelhouse mit pip wheel zu erstellen, dass erstellt einen Order mit dem Paket dass du installieren willst einschliesslich allen Abhängigkeiten als wheels. Beispiel.

Das funktioniert auch dann wenn Pakete auf PyPI nicht als wheel vorhanden sind, in dem Fall baut pip wheel die entsprechenden wheels. Du brauchst dann auch keinen Compiler o.ä. mehr für Pakete mit C Extensions.

Ergebnis ist äquivalent zu der von __deets__ vorgeschlagenen Lösung, Aufwand ist aber wesentlich geringer.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Cool. Kannte ich noch gar nicht!
Antworten