webentwicklung-frage-antwort-db.com.de

Installieren von python - Paketen ohne Internet und Verwenden des Quellcodes als .tar.gz und .whl

wir versuchen einige python Pakete ohne Internet zu installieren.

For ex : python-keystoneclient

Dafür haben wir die Pakete von https://pypi.python.org/pypi/python-keystoneclient/1.7.1 heruntergeladen und auf dem Server gespeichert.

Bei der Installation der Pakete tar.gz und .whl wird jedoch nach abhängigen Paketen gesucht, die zuerst installiert werden sollen. Da auf dem Server keine Internetverbindung besteht, ist der Vorgang fehlgeschlagen.

Zum Beispiel: Für Python-Keystoneclient haben wir die folgenden abhängigen Pakete

stevedore (>=1.5.0)
six (>=1.9.0)
requests (>=2.5.2)
PrettyTable (<0.8,>=0.7)
oslo.utils (>=2.0.0)
oslo.serialization (>=1.4.0)
oslo.i18n (>=1.5.0)
oslo.config (>=2.3.0)
netaddr (!=0.7.16,>=0.7.12)
debtcollector (>=0.3.0)
iso8601 (>=0.1.9)
Babel (>=1.3)
argparse
pbr (<2.0,>=1.6)

Wenn ich versuche, Pakete einzeln aus der obigen Liste zu installieren, wird erneut nach verschachtelten Abhängigkeiten gesucht.

Gibt es eine Möglichkeit, wie wir [~ # ~] alle [~ # ~] abhängigen Pakete für die Installation eines python - Moduls wie python-keystoneclient auflisten könnten?.

29
srinath

So gehe ich mit diesem Fall um:

Auf dem Computer, auf dem ich Zugang zum Internet habe:

mkdir keystone-deps
pip download python-keystoneclient -d "/home/aviuser/keystone-deps"
tar cvfz keystone-deps.tgz keystone-deps

Verschieben Sie dann die TAR-Datei auf den Zielcomputer, der keinen Internetzugang hat, und führen Sie die folgenden Schritte aus:

tar xvfz keystone-deps.tgz
cd keystone-deps
pip install python_keystoneclient-2.3.1-py2.py3-none-any.whl -f ./ --no-index
59

Wenn Sie eine Reihe von Abhängigkeiten installieren möchten, z. B. eine requirements.txt, gehen Sie wie folgt vor:

mkdir dependencies
pip download -r requirements.txt -d "./dependencies"
tar cvfz dependencies.tar.gz dependencies

Und wenn Sie die Datei "dependencies.tar.gz" auf einen Rechner ohne Internet übertragen, tun Sie Folgendes:

tar zxvf dependencies.tar.gz
cd dependencies
pip install * -f ./ --no-index
9
rouble

Wir haben eine ähnliche Situation bei der Arbeit, wo die Produktionsmaschinen keinen Zugang zum Internet haben; Daher muss alles offline und außerhalb des Hosts verwaltet werden.

Folgendes habe ich mit unterschiedlichem Erfolg versucht:

  1. basket Dies ist ein kleines Dienstprogramm, das Sie auf Ihrem mit dem Internet verbundenen Host ausführen. Anstatt zu versuchen, ein Paket zu installieren, wird es stattdessen heruntergeladen und alles andere muss in einem Verzeichnis installiert werden. Anschließend verschieben Sie dieses Verzeichnis auf Ihren Zielcomputer. Vorteile: sehr einfach und benutzerfreundlich, keine Server-Kopfschmerzen; Keine Ports zu konfigurieren. Nachteile: Es gibt keine wirklichen Showstopper, aber das größte Problem ist, dass es keine Version berücksichtigt, die Sie haben könnten. Es wird immer die neueste Version eines Pakets heruntergeladen.

  2. Führen Sie einen lokalen Pypi-Server aus. Verwendet pypiserver und devpi . pypiserver ist sehr einfach zu installieren und einzurichten; devpi braucht etwas mehr Zeit. Beide tun dasselbe: Sie fungieren als Proxy/Cache für das echte pypi und als lokaler pypi-Server für alle selbst erstellten Pakete. localshop ist eine neue, die es nicht gab, als ich sie sah, sie hat auch die gleiche Idee. So funktioniert es, wenn Ihr Computer mit eingeschränktem Internetanschluss eine Verbindung zu diesen Servern herstellt. Diese Server werden dann mit dem Internet verbunden, damit sie das tatsächliche Repository zwischenspeichern und als Proxy bereitstellen können.

Das Problem beim zweiten Ansatz ist, dass Sie, obwohl Sie maximale Kompatibilität und Zugriff auf das gesamte Repository von Python - Paketen erhalten, immer noch sicherstellen müssen, dass alle Abhängigkeiten auf Ihren Zielcomputern installiert sind (z B. Kopfzeilen für Datenbanktreiber und eine Build-Toolchain.) Außerdem berücksichtigen diese Lösungen keine Nicht-PYPI-Repositorys (z. B. Pakete, die auf github gehostet werden).

Wir sind mit der zweiten Option sehr weit gekommen, daher würde ich sie auf jeden Fall empfehlen.

Da wir es nicht mehr müde waren, uns mit Kompatibilitätsproblemen und Bibliotheken zu befassen, haben wir den gesamten Server-Zirkus auf kommerziell unterstützte Docker-Container migriert.

Das heißt, wir liefern alles vorkonfiguriert aus, es muss nichts auf den Produktionsmaschinen installiert werden und es war für uns die problemloseste Lösung.

Wir haben die pypi-Repositorys durch einen lokalen Docker-Image-Server ersetzt.

7
Burhan Khalid

pipdeptree ist ein Befehlszeilenprogramm zum Anzeigen der in einer virtuellen Umgebung installierten python Pakete in Form eines Abhängigkeitsbaums. Verwenden Sie es einfach: https: // github. com/naiquevin/pipdeptree

0
moveax3