it-swarm.com.de

Installation von Python-Paketen vom lokalen Dateisystemordner in virtualenv with pip

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 /srv/pkg/mypackage/mypackage-0.1.0.tar.gz gespeichert.

Nun möchte ich in einer virtuellen Umgebung Pakete installieren, die entweder von pypi oder vom spezifischen lokalen Speicherort /srv/pkg stammen.

Ist das möglich?

PS Ich weiß, dass ich pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz angeben kann. Das wird funktionieren, aber ich spreche über die Verwendung des /srv/pkg-Speicherorts als einen anderen Ort, an dem pip suchen kann, wenn ich pip install mypackage eingebe.

241
chadgh

Ich bin mir ziemlich sicher, dass das, was 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 aufführt. Dieses Tool hilft:

https://github.com/wolever/pip2pi

101
Mikko Ohtamaa

Wie wäre es mit::

pip install --help
...
  -e, --editable <path/url>   Install a project in editable mode (i.e. setuptools
                              "develop mode") from a local project path or a VCS url.

zB pip install -e /srv/pkg

dabei ist/srv/pkg das Verzeichnis der obersten Ebene, in dem 'setup.py' gefunden werden kann.

357
drpoo

Das ist sehr einfach. Der Befehl, den Sie benötigen, ist:

pip install -e <DIRECTORY>

Beachten Sie, dass das Verzeichnis muss eine setup.py-Datei enthält

57
henryJack

Ich installiere pyfuzzybut ist nicht in PyPI; es gibt die Nachricht zurück: No matching distribution found for pyfuzzy.

Ich habe die akzeptierte Antwort ausprobiert 

pip install  --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy

Es funktioniert aber auch nicht und gibt den folgenden Fehler zurück:

Ignorieren von Indizes: https://pypi.python.org/simple Pyfuzzy sammeln Konnte keine Version finden, die die Anforderung pyfuzzy (von Versionen:) .__ erfüllt. Keine passende Distribution für pyfuzzy gefunden

Schließlich habe ich einen einfachen guten Weg gefunden: https://pip.pypa.io/de/latest/reference/pip_install.html

Install a particular source archive file.
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
$ pip install http://my.package.repo/SomePackage-1.0.4.Zip

Der folgende Befehl hat also für mich funktioniert:

pip install ../pyfuzzy-0.1.0.tar.gz.

Ich hoffe es kann dir helfen.

26
Victor Choy

Dies ist die Lösung, die ich am Ende verwendet habe:

import pip


def install(package):
    # Debugging
    # pip.main(["install", "--pre", "--upgrade", "--no-index",
    #         "--find-links=.", package, "--log-file", "log.txt", "-vv"])
    pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])


if __== "__main__":
    install("mypackagename")
    raw_input("Press Enter to Exit...\n")

Ich habe dies aus pip Installationsbeispielen zusammengestellt sowie aus Rikards Antwort auf eine andere Frage . Mit dem Argument "--pre" können Sie Nicht-Produktionsversionen installieren. Das Argument "--no-index" vermeidet das Durchsuchen der PyPI-Indizes. Die "--find-links =". Argumente suchen 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 über ältere installieren.

Ich habe auch einen guten Weg gefunden, sie zu deinstallieren. Dies ist nützlich, wenn Sie verschiedene Python-Umgebungen verwenden. Es ist dasselbe grundlegende Format, nur "uninstall" statt "install", mit einer Sicherheitsmaßnahme, um eine unbeabsichtigte Deinstallation zu verhindern:

import pip


def uninstall(package):
    response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
    if "y" in response.lower():
        # Debugging
        # pip.main(["uninstall", package, "-vv"])
        pip.main(["uninstall", package])
    pass


if __== "__main__":
    uninstall("mypackagename")
    raw_input("Press Enter to Exit...\n")

Der lokale Ordner enthält die folgenden Dateien: install.py, uninstall.py, mypackagename-1.0.Zip

20
Devan Williams

Eine Option --find-links erledigt den Job und funktioniert aus requirements.txt-Datei! 

Sie können Paketarchive in einem Ordner ablegen und das neueste Archiv verwenden, ohne die Anforderungsdatei zu ändern, beispielsweise 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 nette Möglichkeit, proprietäre Pakete zu aktualisieren, legen Sie einfach neue in den Ordner

Auf diese Weise können Sie Pakete von local folder AND pypi mit demselben Aufruf installieren: pip install -r requirements/production.txt

PS. In meinem cookiecutter-djangopackage fork erfahren Sie, wie Sie die Anforderungen aufteilen und die ordnerbasierte Anforderungsorganisation verwenden.

7

Anforderungen in requirements.txt und Egg_dir als Verzeichnis haben

sie können Ihren lokalen Cache erstellen:

$ pip download -r requirements.txt -d eggs_dir

dann ist die Verwendung dieses "Cache" einfach:

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

2

Angenommen, Sie haben eine virtualenv und eine requirements.txt-Datei, dann können Sie in dieser Datei definieren, wo die Pakete abgerufen werden 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
1
marquicus

Auf der Seite Installationspakete können Sie einfach Folgendes ausführen:

pip install/srv/pkg/mypackage

dabei ist /srv/pkg/mypackage das Verzeichnis, das setup.py enthält.


Zusätzlich1, Sie können es aus der Archivdatei installieren:

pip install ./mypackage-1.0.4.tar.gz

1 Obwohl in der Frage aufgrund seiner Beliebtheit vermerkt, ist es auch enthalten.

0
dim8

Ich habe versucht, etwas wirklich einfaches zu erreichen und kläglich gescheitert, wahrscheinlich bin ich dumm.

Wenn Sie über ein Skript/Dockerfile verfügen, das eine Python-Paket-Zip-Datei (z. B. von GitHub) herunterlädt und Sie es dann installieren möchten, können Sie es mit dem Präfix file:/// installieren, wie in folgendem Beispiel

$ wget https://example.com/mypackage.Zip
$ echo "${MYPACKAGE_MD5}  mypackage.Zip" | md5sum --check -
$ pip install file:///.mypackage.Zip

NOTE: Ich weiß, dass Sie das Paket sofort mit pip install https://example.com/mypackage.Zip installieren können, aber in meinem Fall wollte ich die Prüfsumme überprüfen (niemals paranoid genug), und ich versagte bei dem Versuch, die verschiedenen Optionen zu verwenden, die pip bietet/the #md5-Fragment. 

Es war überraschend frustrierend, etwas so einfaches direkt mit pip zu tun. Ich wollte nur eine Prüfsumme übergeben und pip überprüfen, ob die Zip-Datei mit vorher übereinstimmt.

Ich habe wahrscheinlich etwas sehr Dummes gemacht, aber am Ende habe ich aufgegeben und mich dafür entschieden. Ich hoffe, es hilft anderen, etwas Ähnliches zu tun.