Ist es möglich, Pakete mit pip aus dem lokalen Dateisystem zu installieren?
Ich habe python setup.py sdist
für mein Paket ausgeführt, das die entsprechende tar.gz-Datei erstellt hat. Diese Datei wird auf meinem System unter gespeichert /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Jetzt möchte ich in einer virtuellen Umgebung Pakete installieren, die entweder von pypi oder von einem bestimmten lokalen Speicherort stammen /srv/pkg
.
Ist das möglich?
PS
Ich weiß, dass ich angeben kann pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Das wird funktionieren, aber ich spreche davon, den /srv/pkg
Ort als einen anderen Ort zu verwenden, an dem Pip suchen kann, wenn ich tippe pip install mypackage
.
pip install <Path-to-WHL-file>
.Antworten:
Ich bin mir ziemlich sicher, dass das, wonach Sie suchen,
--find-links
Option heißt .Möglicherweise müssen Sie jedoch einen Dummy
index.html
für Ihren lokalen Paketindex generieren, der die Links zu allen Paketen auflistet. Dieses Tool hilft:https://github.com/wolever/pip2pi
quelle
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
sollte arbeiten.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
die Suche in PyPI weiterhin möglich ist, wenn das Paket nicht am angegebenen Speicherort gefunden wird oder wenn eine neuere Version verfügbar ist. Unter Windows finde ich die Kombination mit--only-binary=packagename
(oder--only-binary=:all:
) außerordentlich nützlich. Dies verhindert, dass pip versucht, Pakete mit nativen Abhängigkeiten herunterzuladen, die nur Quelldistributionen auf PyPI haben (und daher kompiliert werden müssen). Dies ist der häufigste Grund, warum ich versuchen muss, aus einem Verzeichnis zu installieren. Im Gegensatz dazu--no-index
kann ich immer noch andere Pakete von PyPI installieren .Wie wäre es mit::
z.B,
pip install -e /srv/pkg
Dabei ist / srv / pkg das Verzeichnis der obersten Ebene, in dem sich 'setup.py' befindet.
quelle
--editable
ist, dass es in das Verzeichnis des lokalen Pakets zu schauen scheint und die Quelle als Git-Repo festlegt, falls es eines gibt - etwas flexibler als nur ein Ordner. Ich kann jedoch keine Dokumentation dafür finden.do pip install -e
den Code von der Git-Fernbedienung auschecke, möchte ich den Code so installieren, wie er ist (mit Änderungen, die noch nicht in der Fernbedienung enthalten sind).Ich installiere
pyfuzzy
, bin aber nicht in PyPI; es gibt die Nachricht zurück :No matching distribution found for pyfuzzy
.Ich habe die akzeptierte Antwort versucht
Aber es funktioniert auch nicht und gibt den folgenden Fehler zurück:
Endlich habe ich dort einen einfachen guten Weg gefunden: https://pip.pypa.io/en/latest/reference/pip_install.html
Der folgende Befehl hat also für mich funktioniert:
Hoffe es kann dir helfen.
quelle
Could not find a version that satisfies
Fehler gestolpert . Vielen Dank.Dies ist die Lösung, die ich letztendlich verwendet habe:
Ich pieced diese zusammen aus pip Beispiele installieren sowie von Rikard Antwort auf andere Frage zusammengesetzt . Mit dem Argument "--pre" können Sie Nicht-Produktionsversionen installieren. Das Argument "--no-index" vermeidet das Durchsuchen der PyPI-Indizes. Die "--find-links =." Argumentensuche im lokalen Ordner (dies kann relativ oder absolut sein). Ich habe die Argumente "--log-file", "log.txt" und "-vv" zum Debuggen verwendet. Mit dem Argument "--upgrade" können Sie neuere Versionen gegenüber älteren installieren.
Ich habe auch einen guten Weg gefunden, sie zu deinstallieren. Dies ist nützlich, wenn Sie mehrere verschiedene Python-Umgebungen haben. Es ist das gleiche Grundformat, nur "Deinstallieren" anstelle von "Installieren", mit einer Sicherheitsmaßnahme, um unbeabsichtigte Deinstallationen zu verhindern:
Der lokale Ordner enthält die folgenden Dateien: install.py, uninstall.py, mypackagename-1.0.zip
quelle
Eine Option --find-links erledigt den Job und es funktioniert aus
requirements.txt
Datei!Sie können Paketarchive in einem Ordner ablegen und das neueste verwenden, ohne die Anforderungsdatei zu ändern. Beispiel
requirements
:Jetzt in
requirements/base.txt
put:Eine gute Möglichkeit, proprietäre Pakete zu aktualisieren. Legen Sie einfach ein neues Paket in den Ordner
Auf diese Weise können Sie Pakete von
local folder
ANDpypi
mit demselben einzigen Aufruf installieren :pip install -r requirements/production.txt
PS. In meiner Cookiecutter-Djangopackage- Gabel erfahren Sie , wie Sie Anforderungen aufteilen und die ordnerbasierte Anforderungsorganisation verwenden.
quelle
Auf der Seite mit den Installationspaketen können Sie einfach Folgendes ausführen:
Dabei ist / srv / pkg / mypackage das Verzeichnis, das setup.py enthält .
Zusätzlich 1 können Sie es aus der Archivdatei installieren:
1 Obwohl in der Frage erwähnt, ist es aufgrund seiner Beliebtheit auch enthalten.
quelle
Angenommen, Sie haben virtualenv und eine
requirements.txt
Datei, dann können Sie in dieser Datei definieren, wo Sie die Pakete erhalten:quelle
Anforderungen in
requirements.txt
undegg_dir
als Verzeichnis habenSie können Ihren lokalen Cache erstellen:
$ pip download -r requirements.txt -d eggs_dir
Dann ist die Verwendung dieses "Caches" einfach wie folgt:
$ pip install -r requirements.txt --find-links=eggs_dir
quelle
Um nur von lokal zu installieren, benötigen Sie 2 Optionen:
--find-links
: wo nach Abhängigkeiten gesucht werden soll. Dasfile://
von anderen erwähnte Präfix ist nicht erforderlich .--no-index
: Suchen Sie in Pypi-Indizes nicht nach fehlenden Abhängigkeiten (Abhängigkeiten nicht installiert und nicht im--find-links
Pfad).Sie können also von jedem Ordner aus Folgendes ausführen:
Wenn Ihr Mypackage ordnungsgemäß eingerichtet ist, werden alle Abhängigkeiten aufgelistet. Wenn Sie Pip Download verwendet haben, um die Kaskade der Abhängigkeiten (dh Abhängigkeiten der Abhängigkeiten usw.) herunterzuladen, funktioniert alles.
Wenn Sie den Pypi-Index verwenden möchten, wenn er verfügbar ist, andernfalls auf lokale Räder zurückgreifen möchten, können Sie ihn entfernen
--no-index
und hinzufügen--retries 0
. Sie werden sehen, dass pip für eine Weile pausiert, während versucht wird, pypi auf eine fehlende Abhängigkeit zu überprüfen (eine, die nicht installiert ist), und wenn festgestellt wird, dass sie diese nicht erreichen kann, wird auf local zurückgegriffen. Es scheint keine Möglichkeit zu geben, pip anzuweisen, "zuerst nach lokalen und dann nach dem Index zu suchen".quelle
Ich habe versucht, etwas wirklich Einfaches zu erreichen und bin kläglich gescheitert, wahrscheinlich bin ich dumm.
Wenn Sie ein Skript haben,
Dockerfile
das eine Python-Paket-Zip-Datei herunterlädt (z. B. von GitHub) und diese dann installieren möchten, können Sie sie mit demfile:///
Präfix installieren, wie im folgenden Beispiel gezeigt :HINWEIS : Ich weiß, dass Sie das Paket sofort mit installieren können,
pip install https://example.com/mypackage.zip
aber in meinem Fall wollte ich die Prüfsumme überprüfen (nie paranoid genug) und bin kläglich gescheitert, als ich versucht habe, die verschiedenen Optionen zu verwenden, die pip / das#md5
Fragment bietet .Es war überraschend frustrierend, etwas so Einfaches direkt damit zu machen
pip
. Ich wollte nur eine Prüfsumme übergeben undpip
überprüfen, ob die Zip-Datei übereinstimmt, bevor ich sie installiere.Ich habe wahrscheinlich etwas sehr Dummes getan, aber am Ende habe ich aufgegeben und mich dafür entschieden. Ich hoffe, es hilft anderen, etwas Ähnliches zu tun.
quelle