556 Stimmen

Installation von Python-Paketen aus dem lokalen Dateisystemordner in virtualenv mit pip

Ist es möglich, Pakete mit pip aus dem lokalen Dateisystem zu installieren?

Ich habe gelaufen python setup.py sdist für mein Paket, das die entsprechende tar.gz-Datei erstellt hat. Diese Datei ist auf meinem System gespeichert unter /srv/pkg/mypackage/mypackage-0.1.0.tar.gz .

In einer virtuellen Umgebung möchte ich nun Pakete installieren, die entweder von pypi oder von einem bestimmten lokalen Speicherort stammen /srv/pkg .

Ist dies 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 von der Verwendung der /srv/pkg Ort als weiteren Ort für die Pip-Suche, wenn ich Folgendes eingebe pip install mypackage .

23voto

Janusz Skonieczny Punkte 15373

Eine Option --find-links erfüllt die Aufgabe und funktioniert von requirements.txt Datei!

Sie können Paketarchive in irgendeinem Ordner ablegen und das neueste nehmen, ohne die Anforderungsdatei zu ändern, zum Beispiel requirements :

.
requirements.txt
requirements
    foo_bar-0.1.5-py2.py3-none-any.whl
    foo_bar-0.1.6-py2.py3-none-any.whl
    wiz_bang-0.7-py2.py3-none-any.whl
    wiz_bang-0.8-py2.py3-none-any.whl
    base.txt
    local.txt
    production.txt

Jetzt in requirements/base.txt setzen:

--find-links=requirements
foo_bar
wiz_bang>=0.8

Eine gute Möglichkeit, proprietäre Pakete zu aktualisieren, indem man einfach neue Pakete in den Ordner legt

Auf diese Weise können Sie die Pakete von local folder UND pypi mit demselben einzigen Anruf: pip install -r requirements/production.txt

PS. Siehe meine cookiecutter-djangopackage Gabel, um zu sehen, wie man Anforderungen aufteilt und ordnerbasierte Anforderungsorganisation verwendet.

15voto

Oliver Punkte 24156

Um nur lokal zu installieren, benötigen Sie 2 Optionen:

  • --find-links : wo nach Abhängigkeiten zu suchen ist. Es besteht keine Notwendigkeit für die file:// von anderen erwähnte Vorwahl.
  • --no-index : sucht nicht in den Pypi-Indizes nach fehlenden Abhängigkeiten (Abhängigkeiten, die nicht installiert und nicht in der --find-links Pfad).

Sie können also von jedem beliebigen Ordner aus die folgenden Aktionen durchführen:

pip install --no-index --find-links /srv/pkg /path/to/mypackage-0.1.0.tar.gz

Wenn Ihr mypackage richtig eingerichtet ist, wird es alle seine Abhängigkeiten auflisten, und wenn Sie pip download verwendet haben, um die Kaskade von Abhängigkeiten herunterzuladen (d.h. Abhängigkeiten von Abhängigkeiten usw.), wird alles funktionieren.

Wenn Sie den pypi-Index verwenden wollen, wenn er zugänglich ist, aber auf lokale Räder zurückgreifen wollen, wenn das nicht der Fall ist, können Sie die --no-index und hinzufügen --retries 0 . Sie werden sehen, dass pip eine kurze Pause einlegt, während es versucht, pypi auf eine fehlende Abhängigkeit (eine nicht installierte) zu überprüfen, und wenn es feststellt, dass es diese nicht erreichen kann, wird es auf die lokale Abhängigkeit zurückgreifen. Es scheint keine Möglichkeit zu geben, pip anzuweisen, erst nach lokalen Abhängigkeiten zu suchen, dann nach dem Index.

13voto

marquicus Punkte 140

Angenommen, Sie haben virtualenv und eine requirements.txt Datei, dann können Sie in dieser Datei festlegen, woher die Pakete kommen sollen:

# Published pypi packages 
PyJWT==1.6.4
email_validator==1.0.3
# Remote GIT repo package, this will install as django-bootstrap-themes
git+https://github.com/marquicus/django-bootstrap-themes#egg=django-bootstrap-themes
# Local GIT repo package, this will install as django-knowledge
git+file:///soft/SANDBOX/python/django/forks/django-knowledge#egg=django-knowledge

12voto

Sławomir Lenart Punkte 6134

Mit Anforderungen in requirements.txt y egg_dir als Verzeichnis

können Sie Ihren lokalen Cache aufbauen:

$ pip download -r requirements.txt -d eggs_dir

dann ist die Verwendung dieses "Cache" einfach:

$ pip install -r requirements.txt --find-links=eggs_dir

3voto

Brooke Yang Punkte 21

Was Sie brauchen, ist --find-links von pip install.

-f, --find-links Wenn eine URL oder ein Pfad zu einer HTML-Datei angegeben wird, wird nach Links zu Archiven gesucht. Wenn ein lokaler Pfad oder eine file:// url, der ein Verzeichnis ist, dann wird in der Verzeichnisliste nach Archiven gesucht.

In meinem Fall, nach python -m build , tar.gz-Paket (und whl Datei) werden erzeugt in ./dist Verzeichnis.

pip install --no-index -f ./dist YOUR_PACKAGE_NAME

Jedes tar.gz-Python-Paket in ./dist kann auf diese Weise installiert werden.

Wenn Ihr Paket jedoch Abhängigkeiten hat, wird dieser Befehl einen Fehler auslösen. Um dies zu beheben, können Sie entweder pip install diese Deps aus den offiziellen pypi-Quellen, dann fügen Sie --no-deps wie diese

pip install --no-index --no-deps -f ./dist YOUR_PACKAGE_NAME

oder kopieren Sie Ihre deps-Pakete in das Verzeichnis ./dist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X