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 .

610voto

calmrat Punkte 7184

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.

z. B, pip install -e /srv/pkg

wobei /srv/pkg das oberste Verzeichnis ist, in dem sich die Datei "setup.py" befindet.

244voto

Mikko Ohtamaa Punkte 75407

Ich bin mir ziemlich sicher, dass das, wonach Sie suchen, folgendermaßen heißt --find-links Option.

Das können Sie tun

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage

129voto

Dimitar Punkte 3911

Von der Seite Installationspakete können Sie einfach laufen:

pip install /srv/pkg/mypackage

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


Zusätzlich 1 können Sie es aus der Archivdatei installieren:

pip install ./mypackage-1.0.4.tar.gz

1 Obwohl es in der Frage erwähnt wird, ist es aufgrund seiner Beliebtheit ebenfalls enthalten.

61voto

Victor Choy Punkte 3670

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

Ich habe die akzeptierte Antwort versucht

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

Aber auch das funktioniert nicht und führt zu folgender Fehlermeldung:

Indizes ignorieren: https://pypi.python.org/simple C Es konnte keine Version gefunden werden, die die Anforderung pyfuzzy erfüllt (von versions: ) Keine passende Distribution für pyfuzzy gefunden

Endlich habe ich einen einfachen, guten Weg dorthin gefunden: https://pip.pypa.io/en/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 bei mir funktioniert:

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

Ich hoffe, es kann Ihnen helfen.

26voto

Devan Williams Punkte 1239

Dies ist die Lösung, die ich letztendlich 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 __name__ == "__main__":
    install("mypackagename")
    raw_input("Press Enter to Exit...\n")

Ich habe das zusammengesetzt aus Pip-Installationsbeispiele als auch von Rikard's Antwort auf weitere Frage . Mit dem Argument "--pre" können Sie Nicht-Produktionsversionen installieren. Das Argument "--no-index" vermeidet die Suche in den PyPI-Indizes. Das Argument "--find-links=." sucht im lokalen Ordner (dieser 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 Versionen installieren.

Ich habe auch eine gute Möglichkeit gefunden, sie zu deinstallieren. Dies ist nützlich, wenn Sie mehrere verschiedene Python-Umgebungen haben. Es ist das gleiche grundlegende Format, nur mit "deinstallieren" statt "installieren", mit einer Sicherheitsmaßnahme, um unbeabsichtigte Deinstallationen 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 __name__ == "__main__":
    uninstall("mypackagename")
    raw_input("Press Enter to Exit...\n")

Der lokale Ordner enthält diese Dateien: install.py, uninstall.py, mypackagename-1.0.zip

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