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.gz
ich Ansible erfolgreich installieren.
Meine Frage ist nun: Gibt es eine Möglichkeit, pip
die 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,
pip
die 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 install
Optionsdokumentation:
--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>
ansible
In 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.txt
um 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 install
Dokumentation, die Beispiele für die Kombination pip install
mit VCS-Links (z. B. Git, Mercurial, Subversion und Bazaar) bietet.
Verweise
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>