Wie installiere ich Pakete offline?

159

Was ist der beste Weg, um ein Python-Paket und seine Abhängigkeiten von pypi für die Offline-Installation auf einem anderen Computer herunterzuladen? Gibt es eine einfache Möglichkeit, dies mit pip oder easy_install zu tun? Ich versuche, die Anforderungsbibliothek auf einer FreeBSD-Box zu installieren, die nicht mit dem Internet verbunden ist.

Chris Drantz
quelle

Antworten:

77

Wenn sich das Paket auf PYPI befindet, laden Sie es und seine Abhängigkeiten in ein lokales Verzeichnis herunter. Z.B

$ mkdir / pypi && cd / pypi
$ ls -la
  -rw-r - r-- 1 Pavel Staff 237954 19. April 11:31 Flask-WTF-0.6.tar.gz
  -rw-r - r-- 1 Pavel Staff 389741 22. Februar 17:10 Jinja2-2.6.tar.gz
  -rw-r - r-- 1 Mitarbeiter 70305 11. April 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r - r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r - r-- 1 Pavel-Mitarbeiter 1108056 22. Februar 17:10 Werkzeug-0.8.2.tar.gz
  -rw-r - r-- 1 Mitarbeiter 488207 10. April 18:26 boto-2.3.0.tar.gz
  -rw-r - r-- 1 Pavel Staff 490192 16. April 12:00 Flasche-0.9-dev-2a6c80a.tar.gz

Einige Pakete müssen möglicherweise von Hand in ähnlich aussehenden Tarballs archiviert werden. Ich mache es oft, wenn ich eine neuere (weniger stabile) Version von etwas möchte. Einige Pakete sind nicht auf PYPI, daher gilt dies auch für sie.

Angenommen, Sie haben eine ordnungsgemäß geformte Python-Anwendung in ~/src/myapp. ~/src/myapp/setup.pywird eine install_requiresListe haben, die ein oder mehrere Dinge erwähnt, die Sie in Ihrem /pypiVerzeichnis haben. Wie so:

  install_requires=[
    'boto',
    'Flask',
    'Werkzeug',
    # and so on

Wenn Sie Ihre App mit allen erforderlichen Abhängigkeiten ausführen möchten, während Sie sie noch hacken, gehen Sie wie folgt vor:

$ cd ~ / src / myapp
$ python setup.py entwickle - immer-entpacken --allow-hosts = Keine --find-links = / pypi

Auf diese Weise wird Ihre App direkt aus Ihrem Quellverzeichnis ausgeführt. Sie können Dinge hacken und dann die App erneut ausführen, ohne etwas neu zu erstellen.

Wenn Sie Ihre App und ihre Abhängigkeiten in der aktuellen Python-Umgebung installieren möchten, gehen Sie folgendermaßen vor:

$ cd ~ / src / myapp
$ easy_install - immer-entpacken --allow-hosts = Keine --find-links = / pypi.

In beiden Fällen schlägt der Build fehl, wenn eine oder mehrere Abhängigkeiten nicht im /pypiVerzeichnis vorhanden sind. Es wird nicht versucht, fehlende Dinge aus dem Internet promisku zu installieren.

Ich empfehle sehr aufrufen setup.py develop ...und easy_install ...in einer aktiven virtuellen Umgebung zu vermeiden , dass Ihre globale Python - Umgebung zu kontaminieren. Es ist (virtuell) also so ziemlich der richtige Weg. Installieren Sie niemals etwas in einer globalen Python-Umgebung.

Wenn der Computer, auf dem Sie Ihre App erstellt haben, dieselbe Architektur hat wie der Computer, auf dem Sie sie bereitstellen möchten, können Sie einfach das gesamte Verzeichnis der virtuellen Umgebung easy_installspeichern, in dem Sie alles gespeichert haben. Kurz vor dem Tarballing müssen Sie das Verzeichnis der virtuellen Umgebung verschiebbar machen (siehe Option --relocatable ). HINWEIS: Auf dem Zielcomputer muss dieselbe Python-Version installiert sein, und auch alle C-basierten Abhängigkeiten, die Ihre App möglicherweise vorinstalliert hat, müssen dort ebenfalls vorinstalliert sein (z. B. wenn Sie von PIL abhängig sind , müssen libpng, libjpeg usw. vorinstalliert sein). .

Pavel Repin
quelle
3
Stattdessen --allow-hosts=Nonekönnten Sie den Schalter benutzen--no-index
Romor
Können Sie bitte erläutern, wie Sie eine ordnungsgemäß geformte Python-Anwendung erstellen?
Psr
3
@ PrabhjotRai bitte verpacken.python.org/distributing
Pavel Repin
299

Mit dem downloadBefehl pip können Sie Pakete herunterladen, ohne sie zu installieren:

pip download -r requirements.txt

(In früheren Versionen von pip wurde dies geschrieben pip install --download -r requirements.txt .)

Anschließend können Sie pip install --no-index --find-links /path/to/download/dir/ -r requirements.txtdiese heruntergeladenen SD-Listen installieren, ohne auf das Netzwerk zuzugreifen.

Carl Meyer
quelle
Das Problem dabei ist, dass die Abhängigkeiten möglicherweise andere Abhängigkeiten aufweisen und diese nicht heruntergeladen werden.
Vikki
Der Schlangenkorb (auf Pip aufgebaut) lädt auch die Abhängigkeiten der Abhängigkeiten herunter.
Vikki
14
@vikki Nicht wahr, "pip install --download" lädt auch Abhängigkeiten herunter, sodass die obigen Befehle auch dann ordnungsgemäß funktionieren, wenn Ihre Anforderungen zusätzliche Abhängigkeiten aufweisen. Schlangenkorb kann andere nützliche Dinge tun (nie benutzt), aber es wird definitiv nicht aus diesem Grund benötigt.
Carl Meyer
6
@vikki Ich verstehe, was du sagst, aber ich sage dir, dass es nicht wahr ist :-) Du solltest es tatsächlich versuchen, bevor du die gleiche Behauptung erneut postest. Ich habe gerade "pytest" in eine require.txt eingefügt, "pip install --download. -R required.txt" ausgeführt und sdists für pytest und seine setup.py-Abhängigkeit "py" heruntergeladen.
Carl Meyer
3
Ich denke, es sollte sein: --find-links file:/path/to/some/dir/und Sie sollten mit der gleichen Version von pip herunterladen und installieren - sonst könnte es fehlschlagen
A. Binzxxxxxx
56

Wenn Sie Python-Bibliotheken und ihre Abhängigkeiten offline installieren möchten, führen Sie die folgenden Schritte auf einem Computer aus, auf dem dasselbe Betriebssystem, Netzwerk und Python installiert sind:

1) Erstellen Sie eine requirements.txtDatei mit ähnlichem Inhalt (Hinweis - dies sind die Bibliotheken, die Sie herunterladen möchten):

Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0

Eine Option zum Erstellen der Anforderungsdatei ist die Verwendung pip freeze > requirements.txt. Dadurch werden alle Bibliotheken in Ihrer Umgebung aufgelistet. Dann können Sie in gehen requirements.txtund nicht benötigte entfernen.

2) Führen Sie den Befehl aus mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse, um Bibliotheken und ihre Abhängigkeiten in das Verzeichnis herunterzuladenwheelhouse

3) Kopieren Sie die Anforderungen.txt in wheelhouse Verzeichnis

4) Archiv Steuerhaus in wheelhouse.tar.gzmittar -zcf wheelhouse.tar.gz wheelhouse

Laden Sie dann wheelhouse.tar.gzauf Ihren Zielcomputer hoch:

1) Ausführen tar -zxf wheelhouse.tar.gz, um die Dateien zu extrahieren

2) Ausführen pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse, um die Bibliotheken und ihre Abhängigkeiten zu installieren

Chaokunyang
quelle
6
Dies ist die klarste Antwort mit den richtigen Schritten für einen Anfänger. Vielen Dank
Kumarharsh
Dies ist die pythonischste Art, die ich bisher gesehen habe. Vielen Dank!
Peluzza
2
Aber wenn ich Ihrer Anweisung pip installfolge, heißt es am Ende: FEHLER: Ich konnte keine Version finden, die die Anforderungen erfüllt. "
DennisLi
@ TennisLi Was ist deine Python- und Pip-Version?
Chaokunyang
Ich habe das herausgefunden, weil pip die spezifische Version des Pandas-Pakets in meiner Anforderung.txt nicht finden kann, da ich pip3 verwendet habe, um die Pandas 0.2
DennisLi
13

Offline-Python. Dazu benutze ich virtualenv (isolierte Python-Umgebung)

1) Installieren Sie virtualenv online mit pip:

pip install virtualenv --user

oder offline mit whl: Gehen Sie zu diesem Link , laden Sie die letzte Version (.whl oder tar.gz) herunter und installieren Sie diese mit diesem Befehl:

pip install virtualenv-15.1.0-py2.py3-none-any.whl --user

durch die Verwendung müssen --userSie nicht verwendensudo pip… .

2) Verwenden Sie virtualenv

Wählen Sie auf einem Online-Computer ein Verzeichnis mit Terminal aus cdund führen Sie diesen Code aus:

python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask

Nachdem Sie alle Pakete installiert haben, müssen Sie ein requirements.txtSchreiben erstellen, während Ihre virtuelle Umgebung aktiv ist

pip freeze > requirements.txt

Öffne ein neues Terminal und erstelle eine andere Umgebung wie myenv2.

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls

Jetzt können Sie zu Ihrem Offline-Ordner gehen, in dem sich Ihr requirements.txtund Ihr tranferred_packagesOrdner befinden. Laden Sie die Pakete mit folgendem Code herunter und legen Sie sie alle in einem tranferred_packagesOrdner ab.

pip download -r requirements.txt

Bringen Sie Ihren Offline-Ordner auf den Offline-Computer und dann

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt

Was ist in dem Ordner offline [Anforderungen.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...}]

Checkliste Ihres Pakets

pip list

Hinweis: Da wir uns im Jahr 2017 befinden, ist es besser, Python 3 zu verwenden. Mit diesem Befehl können Sie Python 3 Virtualenv erstellen.

virtualenv -p python3 envname
Cyera
quelle
2
Hier scheinen Schritte zu fehlen oder "verschleiert" zu sein. Ich würde erwarten, dass "Deaktivieren" und dann "Pip Freeze" angezeigt werden ... CD offline und ./transferred_packages erscheint aus dem Nichts - dies muss eindeutig bereinigt werden?
Hannu
Vielleicht, aber Sie sollten überlegen, ob ich einen kurzen Beitrag schreiben möchte, ob dieser Prozess komplex ist und ich nicht jeden Schritt schreiben kann (das ist nur in YouTube möglich).
Cyera
Dies ist die beste Antwort imho.
Hat
Dies wäre die beste Antwort, wenn überhaupt etwas zum Einrichten des Ordners tranferred_packages gesagt würde. Ohne entscheidende Schritte, -1
Zim
8

Laden Sie den Tarball herunter , übertragen Sie ihn auf Ihren FreeBSD-Computer und extrahieren Sie ihn. Führen python setup.py installSie ihn anschließend aus und fertig!

EDIT: Nur um das hinzuzufügen, können Sie die Tarballs jetzt auch mit pip installieren.

dav1d
quelle
1
Was ist mit all den Abhängigkeiten? Was ist der beste Weg, um sie zu lösen? Muss ich die Abhängigkeiten auch manuell installieren?
Chris Drantz
Ja, das ist leider der einzige Weg, den ich kenne.
Dav1d
8

Lassen Sie mich Schritt für Schritt durch den Prozess gehen:

  1. Erstellen Sie auf einem mit dem Internet verbundenen Computer einen Ordner.
   $ mkdir packages
   $ cd packages
  1. Öffnen Sie eine Eingabeaufforderung oder Shell und führen Sie den folgenden Befehl aus:

    Angenommen, das gewünschte Paket ist tensorflow

    $ pip download tensorflow

  2. Kopieren Sie nun auf dem Zielcomputer den packagesOrdner und wenden Sie den folgenden Befehl an

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'

Beachten Sie, dass das tensorflow-xyz.whldurch den ursprünglichen Namen des erforderlichen Pakets ersetzt werden muss.

Arunanshu Biswas
quelle
6

Mit wheelkompilierte Pakete.

bündeln:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)

Tarball kopieren und installieren:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*

Beachten Sie, dass wheelBinärpakete nicht maschinenübergreifend sind.

Mehr ref. hier: https://pip.pypa.io/en/stable/user_guide/#installation-bundles

Eshizhan
quelle
1
Ich hatte Probleme beim Bündeln auf einem Computer mit Python 3.6 und beim Extrahieren auf einem anderen mit Python 3.5: " <Paket> .whl ist auf dieser Plattform kein unterstütztes Rad ". Die Quell- und Zielversionen müssen möglicherweise mit einigen Paketen übereinstimmen.
Juuso Ohtonen
5

Ich hatte ein ähnliches Problem. Und ich musste es genauso installieren lassen, wie wir es von pypi aus tun.

Ich habe folgende Dinge getan:

  1. Erstellen Sie ein Verzeichnis zum Speichern aller Pakete auf dem Computer, die über einen Internetzugang verfügen.

    mkdir -p /path/to/packages/
  2. Laden Sie alle Pakete auf den Pfad herunter

    pip download -r requirements.txt -d /path/to/packages
    
    Eg:- ls /root/wheelhouse/  # **/root/wheelhouse** is my **/path/to/packages/**
    total 4524
    -rw-r--r--. 1 root root   16667 May 23  2017 incremental-17.5.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   34713 Sep  1 10:21 attrs-18.2.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
    -rw-r--r--. 1 root root  133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root    7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
    -rw-r--r--. 1 root root  573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
  3. Tarieren Sie das Paketverzeichnis und kopieren Sie es auf den Computer ohne Internetzugang. Dann mach,

    cd /path/to/packages/
    tar -cvzf packages.tar.gz .  # not the . (dot) at the end

    Kopieren Sie die Datei packages.tar.gz auf den Zielcomputer ohne Internetzugang.

  4. Gehen Sie auf dem Computer ohne Internetzugang wie folgt vor (Angenommen, Sie haben die geteerten Pakete auf dem aktuellen Computer nach / path / to / package / kopiert ).

    cd /path/to/packages/
    tar -xvzf packages.tar.gz
    mkdir -p $HOME/.config/pip/
    
    vi $HOME/.config/pip/pip.conf

    und fügen Sie den folgenden Inhalt ein und speichern Sie ihn.

    [global]
    timeout = 10
    find-links = file:///path/to/package/
    no-cache-dir = true
    no-index = true
  5. Schließlich schlage ich vor, dass Sie eine Form von virtualenvfür die Installation der Pakete verwenden.

    virtualenv -p python2 venv # use python3, if you are on python3
    source ./venv/bin/activate
    pip install <package>

Sie sollten in der Lage sein, alle Module herunterzuladen, die sich im Verzeichnis / path / to / package / befinden .

Hinweis: Ich habe dies nur getan, weil ich keine Optionen hinzufügen oder die Art und Weise ändern konnte, wie wir die Module installieren. Sonst hätte ich getan

    pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt
Han Solo
quelle
3

Für Pip 8.1.2 können Sie pip download -r requ.txtPakete auf Ihren lokalen Computer herunterladen.

Umut Gunebakan
quelle