Wie installiere ich Python-Pakete mit allen Abhängigkeiten offline über Pip3?

Wie installiere ich Python-Pakete mit allen Abhängigkeiten offline über Pip3?

zunächst einmal habe ich es geschafft, Ansible auf einem Server zu installieren, der keinen Internetzugang hat. Aber ich frage mich, ob mein Ansatz richtig ist.

Als erstes habe ich die notwendigen Abhängigkeiten über heruntergeladen pip3.

pip3 download ansible -d .

Dies führte zum Download der folgenden Dateien:

ansible-2.9.4.tar.gz                          
cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl  
MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl  
PyYAML-5.3.tar.gz
cffi-1.13.2-cp36-cp36m-manylinux1_x86_64.whl  
Jinja2-2.11.1-py2.py3-none-any.whl                
pycparser-2.19.tar.gz                              
six-1.14.0-py2.py3-none-any.whl

Nachdem ich diese Dateien nun auf meinem Remote-Computer verfügbar gemacht habe, habe ich versucht,

pip3 install ansible-2.9.4.tar.gz

um Ansible zu installieren.

Dies führte zu folgendem Fehler:

Processing ./ansible-2.9.4.tar.gz
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 
'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7f00726f9ef0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /simple/jinja2/

Also habe ich versucht, Jinja2 manuell zu installieren:

pip3 install jinja2-2.11.1-py2.py3-none-any.whl

Aber auch das hat nicht funktioniert:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection
 broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 
0x7fd303a23940>: Failed to establish a new connection: [Errno -2] Name or service not known',)': 
/simple/markupsafe/

Nachdem Markupsafe installiert war, konnte auch Jinja2 installiert werden. Abschließend konnte pip3 install ansible-2.9.4.tar.gzich Ansible erfolgreich installieren.

Meine Frage ist nun: Gibt es eine Möglichkeit, pipdie heruntergeladenen Dateien zur Installation der Abhängigkeiten zu verwenden, oder gibt es einen einfacheren Ansatz, um ein bestimmtes Python-Paket mit allen seinen Abhängigkeiten offline zu installieren?

Vielen Dank für Ihre Hilfe und viele Grüße. yabberth

Antwort1

Gibt es eine Möglichkeit, pipdie heruntergeladenen Dateien zum Installieren der Abhängigkeiten zu verwenden, oder gibt es einen einfacheren Ansatz, um ein bestimmtes Python-Paket mit allen seinen Abhängigkeiten offline zu installieren?

Ich glaube, was Sie suchen, sind die--kein-indexUnd--find-linksOptionen zu pip install. Gemäß der offiziellen pip installOptionsdokumentation:

--kein-index

Paketindex ignorieren (stattdessen nur die --find-links-URLs betrachten).

-f, --find-links

Wenn es sich um eine URL oder einen Pfad zu einer HTML-Datei handelt, suchen Sie nach Links zu Archiven. Wenn es sich um einen lokalen Pfad oder eine file://-URL handelt, die ein Verzeichnis ist, suchen Sie in der Verzeichnisliste nach Archiven.

Mit diesen Optionen können Sie z. B. eine lokale Installation durchführen:

pip3 install --no-index --find-links /some/path <package name>

oder Remote-Installation (z. B. über HTTP):

pip3 install --no-index --find-links http:\\remotes\server <package name>

ansibleIn Ihrem Fall sollten Sie für den Paketnamen einfach Folgendes verwenden können , z. B.:

pip3 install --no-index --find-links /some/path ansible

pip3 install --no-index --find-links http:\\remotes\server ansible

Wenn Sie möchten, können Sie jedoch den vollständigen Dateinamen verwenden:

pip3 install --no-index --find-links /some/path ansible-2.9.4.tar.gz

pip3 install --no-index --find-links http:\\remotes\server ansible-2.9.4.tar.gz

Vorausgesetzt, alle erforderlichen Abhängigkeiten befinden sich am selben Speicherort (wie in Ihrer ursprünglichen Frage aufgeführt), sollten sie wie gewohnt installiert werden (d. h. ohne dass Sie jede Abhängigkeit der Reihe nach manuell installieren müssen).


Anforderungen

Eine andere Möglichkeit könnte darin bestehen, eine Anforderungsdatei mit der richtigen Installationsreihenfolge für Abhängigkeiten zu erstellen, z. B.:

Beispiel: requirements.txt

/path/to/MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
/path/to/Jinja2-2.11.1-py2.py3-none-any.whl 
/path/to/ansible-2.9.4.tar.gz
# ...                          

Dann verwenden Sie eg, pip3 install -r requirements.txtum die aufgelisteten Pakete zu installieren. Sie können auch wieder eg HTTP-Links verwenden:

Beispiel: requirements.txt

http:\\remotes\server\MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 
http:\\remotes\server\Jinja2-2.11.1-py2.py3-none-any.whl 
http:\\remotes\server\ansible-2.9.4.tar.gz
# ... 

Der klare Nachteil hierbei besteht darin, dass Sie, vorausgesetzt, ein Paket ist von einem anderen abhängig, bereits die Reihenfolge kennen müssen, in der bestimmte Pakete installiert werden müssen.


Andere URL-Optionen

Vielleicht möchten Sie auch einen Blick auf dieAbschnitt Versionskontrollsystem (VCS)der pip installDokumentation, die Beispiele für die Kombination pip installmit VCS-Links (z. B. Git, Mercurial, Subversion und Bazaar) bietet.


Verweise

pip installieren

pip install (Optionen)

Antwort2

Da Sie keinen Vollspiegel benötigen, würde ich vorschlagen,Python-Pypi-Spiegel:

1- Installieren Sie python-pypi-mirror mit pip auf einem Server mit Internetverbindung.

2- Installieren Sie das Python-Modul http.server auf diesem Server.

3- Erstellen Sie ein Verzeichnis, in dem Ihre Pip-Pakete gehostet werden.

4- Laden Sie die benötigten Pakete mit python-pypi-mirror in das kürzlich erstellte und als HTTP-Server bereitgestellte Verzeichnis herunter (es enthält alle Abhängigkeiten).

5- Installieren Sie das benötigte Paket remote.

 pip3 install --trusted-host <http_server> -i http://<http_server>:<http.server_default_port>/simple <package_name>

Alle nötigen Anleitungen finden Sie hier

verwandte Informationen