Ich installiere viele der gleichen Pakete in verschiedenen virtuellen Umgebungen. Gibt es eine Möglichkeit, ein Paket einmal herunterzuladen und dann pip aus einem lokalen Cache installieren zu lassen?
Dies würde die Download-Bandbreite und -Zeit reduzieren.
virtualenv
pip
Matthew Rankin
quelle
quelle
Antworten:
Aktualisierte Antwort 19-Nov-15
Laut Pip-Dokumentation :
Daher besteht die aktualisierte Antwort darin, pip nur mit seinen Standardeinstellungen zu verwenden, wenn Sie einen Download-Cache wünschen.
Ursprüngliche Antwort
Aus den Pip News , Version 0.1.4:
Um dies zu nutzen, habe ich Folgendes zu meinem hinzugefügt
~/.bash_profile
:oder, wenn Sie auf einem Mac sind:
Anmerkungen
PIP_DOWNLOAD_CACHE
Verzeichnis hinzugefügt . Zum Beispiel habe ich jetzt einige Django-Pakete.virtualenvs
Daten im Flugzeug, aber es ist trotzdem großartig.quelle
Meiner Meinung nach
pip2pi
ist eine viel elegantere und zuverlässigere Lösung für dieses Problem.Aus den Dokumenten:
pip2pi
Mit zwei einfachen Befehlen können Sie Ihren eigenen PyPI-Index erstellen:Verwenden Sie zum Spiegeln eines Pakets und aller seiner Anforderungen
pip2tgz
:So erstellen Sie einen Paketindex aus dem vorherigen Verzeichnis:
Um von dem in Schritt 2 erstellten Index zu installieren, können Sie einfach Folgendes verwenden:
Sie können sogar Ihren eigenen Index auf einen Remote-Host mit spiegeln
pip2pi
.quelle
pip2tgz
Erkennt, ob Sie das Paket bereits in das angegebene Verzeichnis heruntergeladen haben. Wenn Sie also dieselbe Installationszeile oder mehrere Installationszeilen mit überlappenden Abhängigkeiten ausführen, wird jedes Paket nur einmal heruntergeladen.Für neuere Pip-Versionen:
Neuere Pip-Versionen speichern Downloads jetzt standardmäßig im Cache. Siehe diese Dokumentation:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
Für ältere Pip-Versionen:
Erstellen Sie eine Konfigurationsdatei mit dem Namen
~/.pip/pip.conf
und fügen Sie den folgenden Inhalt hinzu:Unter OS X wäre ein besserer Weg zu wählen,
~/Library/Caches/pip
da er der Konvention folgt, die andere OS X-Programme verwenden.quelle
pip.conf
einedownload_cache
Einstellung haben, die auf dasselbe systemweite Verzeichnis verweist.PIP_DOWNLOAD_CACHE hat einige schwerwiegende Probleme. Am wichtigsten ist, dass der Hostname des Downloads in den Cache codiert wird, sodass die Verwendung von Spiegeln unmöglich wird.
Die bessere Möglichkeit, einen Cache mit Pip-Downloads zu verwalten, besteht darin, den Schritt "Paket herunterladen" vom Schritt "Paket installieren" zu trennen. Die heruntergeladenen Dateien werden üblicherweise als "SDIST-Dateien" (Quelldistributionen) bezeichnet und ich werde sie in einem Verzeichnis $ SDIST_CACHE speichern.
Die zwei Schritte sind:
Dadurch wird das Paket heruntergeladen und in dem Verzeichnis abgelegt, auf das $ SDIST_CACHE verweist. Das Paket wird nicht installiert. Und dann rennst du:
So installieren Sie das Paket in Ihrer virtuellen Umgebung Im Idealfall wird $ SDIST_CACHE unter Ihrer Quellcodeverwaltung festgeschrieben. Bei der Bereitstellung in der Produktion würden Sie nur den zweiten Befehl pip ausführen, um die Pakete zu installieren, ohne sie herunterzuladen.
quelle
Ab Version 6.0 wird
pip
jetzt ein eigenes Caching durchgeführt:Weitere Informationen über den obigen Link :
quelle
Pip Wheel ist eine hervorragende Option, die mit der zusätzlichen Funktion des Vorkompilierens der Pakete das macht, was Sie wollen. Aus den offiziellen Dokumenten :
Jetzt sind in Ihrem
/tmp/wheelhouse
Verzeichnis alle Abhängigkeiten vorkompiliert, sodass Sie den Ordner auf einen anderen Server kopieren und alles mit diesem Befehl installieren können:Beachten Sie, dass nicht alle Pakete maschinenübergreifend vollständig portierbar sind. Einige Pakete werden speziell für die von Ihnen verwendete Python-Version, Betriebssystemverteilung und / oder Hardwarearchitektur erstellt. Dies wird im Dateinamen angegeben, wie
-cp27-none-linux_x86_64
bei CPython 2.7 unter 64-Bit-Linux usw.quelle
Wenn Sie nur pip verwenden (meine Version ist 1.2.1), können Sie auch ein lokales Repository wie folgt erstellen:
Beim ersten Aufruf von pip werden die Pakete aus der Anforderungsdatei (nur) im lokalen Repository nachgeschlagen und von dort aus installiert. Wenn dies fehlschlägt, ruft pip die Pakete von ihrem üblichen Speicherort (z. B. PyPI) ab und lädt sie auf das herunter
PIP_SDIST_INDEX
(installiert jedoch nichts!). Der erste Aufruf wird "wiederholt", um das Paket ordnungsgemäß aus dem lokalen Index zu installieren.(
--download-cache
Erstellt einen lokalen Dateinamen, der die vollständige (maskierte) URL ist, und pip kann diesen nicht als Index mit verwenden--find-links
.--download-cache
Verwendet die zwischengespeicherte Datei, falls gefunden. Wir könnten diese Option zum zweiten Aufruf von pip hinzufügen, jedoch seit dem Index Funktioniert bereits als eine Art Cache, bringt es nicht unbedingt viel. Es würde helfen, wenn Ihr Index zum Beispiel geleert wird.)quelle
Hierfür gibt es eine neue Lösung namens Pip-Accel , ein Drop-In-Ersatz für das integrierte
pip
Caching.Wir haben eine etwa 10-fache Beschleunigung beim Wechsel von
pip
zu gesehenpip-accel
.quelle
Eine einfachere Option ist
basket
.Wenn ein Paketname angegeben wird, werden dieser und alle Abhängigkeiten an einen zentralen Ort heruntergeladen. ohne die Nachteile des Pip-Cache. Dies ist ideal für die Offline-Verwendung.
Sie können dieses Verzeichnis dann als Quelle verwenden für
pip
:Oder
easy_install
:Sie können damit auch den Warenkorb aktualisieren, wenn Sie online sind.
quelle
Ich denke, das Paket "pip-accel" muss eine gute Wahl sein.
quelle