it-swarm.com.de

Installieren Sie ein Python-Paket in einem anderen Verzeichnis mit pip

Ich weiß, dass die offensichtliche Antwort darin besteht, virtualenv und virtualenvwrapper zu verwenden, aber aus verschiedenen Gründen kann/will ich das nicht.

Wie modifiziere ich den Befehl?

pip install package_name

pip das Paket an einem anderen Ort als dem Standardcode site-packages installieren lassen?

342
Monika Sulik

Benutzen:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

Möglicherweise möchten Sie auch --ignore-installed verwenden, um zu erzwingen, dass alle Abhängigkeiten mit diesem neuen Präfix erneut installiert werden. Sie können --install-option mehrfach verwenden, um eine der Optionen hinzuzufügen, die Sie mit python setup.py install verwenden können (--prefix ist wahrscheinlich das, was Sie möchten, aber es gibt eine Menge weiterer Optionen, die Sie verwenden könnten).

289
Ian Bicking

Der - Ziel Schalter ist das, wonach Sie suchen:

pip install --target = d:\irgendwo\anders\als\der\Standardpaketname

Sie müssen jedoch noch d:\somewhere\other\than\the\default zu PYTHONPATH hinzufügen, um sie von diesem Ort aus tatsächlich verwenden zu können.


Aktualisieren Sie das Pip, wenn der Zielschalter nicht verfügbar ist:

Unter Linux oder OS X:

pip install -U pip

Unter Windows (das funktioniert um ein Problem ):

python -m pip install -U pip
400

Anstelle der --target-Option oder der --install-options-Option habe ich festgestellt, dass das Folgende gut funktioniert (aus der Diskussion eines Fehlers bezüglich dieser Sache unter https://github.com/pypa/pip/issues/446 ):

PYTHONUSERBASE=/path/to/install/to pip install --user

(Oder legen Sie das Verzeichnis PYTHONUSERBASE in Ihrer Umgebung fest, bevor Sie den Befehl mit export PYTHONUSERBASE=/path/to/install/to ausführen.)

Dies verwendet die sehr nützliche --user-Option, weist sie jedoch an, die bin, lib, share und andere Verzeichnisse zu erstellen, die Sie unter einem benutzerdefinierten Präfix anstelle von $HOME/.local erwarten würden.

Dann können Sie dies zu Ihrer PATH, PYTHONPATH und anderen Variablen hinzufügen, wie Sie es von einem normalen Installationsverzeichnis erwarten würden.

Beachten Sie, dass Sie möglicherweise auch die Optionen --upgrade und --ignore-installed angeben müssen, wenn Pakete, für die dies erforderlich ist, neuere Versionen im Verzeichnis PYTHONUSERBASE installiert werden müssen, um die vom System bereitgestellten Versionen zu überschreiben.

Ein vollständiges Beispiel:

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

..zum Installieren der neuesten Versionen des Pakets scipy und numpy in einem Verzeichnis, das Sie wie folgt in Ihre PYTHONPATH einfügen können (in diesem Beispiel für bash und für Python 2.6 unter CentOS 6):

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

Die Verwendung von virtualenv ist immer noch eine bessere und schönere Lösung!

57
David Gardner

Die Installation eines Python-Pakets enthält oft nur einige reine Python-Dateien. Wenn das Paket Daten, Skripts und oder ausführbare Dateien enthält, werden diese in anderen Verzeichnissen als die reinen Python-Dateien installiert.

Angenommen, Ihr Paket enthält keine Daten/Scripts/Executables, und Sie möchten, dass Ihre Python-Dateien in /python/packages/package_name (und nicht in ein Unterverzeichnis ein paar Ebenen unterhalb von /python/packages wie bei --prefix) gespeichert werden, können Sie den einmaligen Befehl verwenden:

pip install --install-option="--install-purelib=/python/packages" package_name

Wenn Sie möchten, dass alle (oder die meisten) Ihrer Pakete dorthin gehen, können Sie Ihren ~/.pip/pip.conf so bearbeiten, dass er Folgendes enthält:

[install]
install-option=--install-purelib=/python/packages

Auf diese Weise können Sie nicht vergessen, dass Sie es immer wieder spezifizieren müssen.

Alle im Paket enthaltenen excecutables/data/scripts bleiben an ihren Standardpositionen, sofern Sie keine zusätzlichen Installationsoptionen angeben (--prefix/--install-data/--install-scripts usw.). Weitere Informationen finden Sie in den Optionen custom installation .

42
Anthon

Um eine Bibliothek genau dort zu installieren, wo ich sie haben wollte, navigierte ich zu dem Ort, an dem ich das Verzeichnis mit dem Terminal wollte

pip install mylibraryName -t . 

die Logik, die ich von dieser Seite übernommen habe: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

22
user2738183

Niemand scheint die Option -t erwähnt zu haben, aber die einfachste:

pip install -t <direct directory> <package>
15
Erwan

Fügen Sie einfach einen Punkt zur Antwort von @Ian Bicking hinzu:

Die Verwendung der Option --user zur Angabe des installierten Verzeichnisses funktioniert auch, wenn ein Python-Paket im eigenen Verzeichnis (ohne Sudo-Benutzerrecht) auf einem Remote-Server installiert werden soll.

Z.B., 

pip install --user python-memcached

Der Befehl installiert das Paket in einem der Verzeichnisse, die in Ihrem PYTHONPATH aufgelistet sind.

14
Good Will

Neuere Versionen von pip (8 oder höher) können die Option --prefix direkt verwenden :

pip install --prefix=$PREFIX_PATH package_name

dabei ist $PREFIX_PATH das Installationspräfix, in dem lib, bin und andere Ordner der obersten Ebene abgelegt werden.

12
Mike T

Ich habe diese Optionen mit python3.5 und pip 9.0.3 getestet:

pip install --target/myfolder [Pakete]  

Installiert ALLE Pakete einschließlich Abhängigkeiten unter/myfolder. Berücksichtigt nicht, dass abhängige Pakete bereits an anderer Stelle in Python installiert sind. Sie finden Pakete aus/myfolder/[package_name]. Falls Sie mehrere Python-Versionen haben, wird dies nicht berücksichtigt (keine Python-Version im Paketordnernamen).

pip install --prefix/myfolder [Pakete]

Checks sind bereits installierte Abhängigkeiten. Installiert Pakete in /myfolder/lib/python3.5/site-packages/[packages]

pip install --root/myfolder [Pakete]

Überprüft Abhängigkeiten wie --prefix, aber das Installationsverzeichnis lautet /myfolder/usr/local/lib/python3.5/site-packages/[package_name].

pip install --user [Pakete]

Installiert Pakete in $ HOME: /Home/[USER] /. Local/lib/python3.5/site-packages Python sucht automatisch von diesem .local-Pfad aus, so dass Sie es nicht hinzufügen müssen dein PYTHONPATH. 

=> In den meisten Fällen ist --user die beste Option. Falls der Heimatordner aus irgendeinem Grund nicht verwendet werden kann, dann --prefix.

4
Mikko

Zu dem ohnehin guten Rat hinzuzufügen, da ich ein Problem mit der Installation von IPython hatte, wenn ich keine Schreibberechtigung für /usr/local hatte.

pip verwendet distutils für seine Installation und dieser Thread erläutert, wie dies zu einem Problem führen kann, da es auf die Einstellung sys.prefix angewiesen ist.

Mein Problem trat auf, als die IPython-Installation versuchte, mit Permission denied nach '/ usr/local/share/man/man1' zu schreiben. Da die Installation fehlgeschlagen ist, wurden die IPython-Dateien scheinbar nicht in das Verzeichnis bin geschrieben.

Mit "--user" funktionierte es und die Dateien wurden in ~/.local geschrieben. Durch Hinzufügen von ~/.local/bin zum $ PATH konnte ich "ipython" von dort aus verwenden.

Ich versuche jedoch, dies für einige Benutzer zu installieren und hatte die Schreibberechtigung für das /usr/local/lib/python2.7-Verzeichnis erhalten. Ich habe dort ein "bin" -Verzeichnis erstellt und Anweisungen für Distutils gesetzt:

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

dann (-I wird verwendet, um die Installation trotz früherer Fehler/.local-Installation zu erzwingen):

pip install -I ipython

Dann fügte ich /usr/local/lib/python2.7/bin zu $PATH hinzu.

Ich dachte, ich würde dies einbeziehen, falls jemand anderes ähnliche Probleme auf einer Maschine hat, auf die Sudo keinen Zugriff hat.

3
Stuart Brock

Ich schlage vor, der Dokumentation zu folgen und die Datei ~/.pip/pip.conf zu erstellen. Beachten Sie in der Dokumentation, dass das angegebene Header-Verzeichnis fehlt, was zu folgenden Fehlern führt:

error: install-base or install-platbase supplied, but installation scheme is incomplete

Der volle Arbeitsinhalt der conf-Datei ist:

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

Leider kann ich installieren, aber bei dem Versuch, pip zu deinstallieren, wird mir mitgeteilt, dass es kein solches Paket für die Deinstallation gibt. Etwas ist immer noch falsch, aber das Paket wird an den vordefinierten Ort verschoben.

0
kensai
pip install packageName -t pathOfDirectory

oder

pip install packageName --target pathOfDirectorty
0
kundan kaushik

Wenn Sie Brew mit Python verwenden, werden Pip/Pip3 leider mit sehr begrenzten Optionen geliefert. Sie haben nicht die Optionen --install-option, --target, --user wie oben erwähnt.

Hinweis on pip install --user 
Der normale Pip-Installationsbenutzer ist für gebrühtes Python deaktiviert. Dies liegt an einem Fehler in distutils, da Homebrew eine distutils.cfg schreibt, die das Paketpräfix ..__ festlegt. Eine mögliche Problemumgehung (die ausführbare Skripts in ~/Library/Python /./ bin ablegt) ist: python -m pip install --user --install-option="--prefix=" <package-name>

Diese Zeile könnte sehr umständlich sein. Ich schlage vor, pyenv für das Management zu verwenden. .__ Wenn Sie verwenden 

brew upgrade python python3

Ironischerweise sind Sie eigentlich downgrade pip-Funktionalität.

(Ich poste diese Antwort, einfach weil pip in meinem mac osx nicht die Option --target hat und ich habe Stunden damit verbracht, sie zu reparieren.)

0
anonymous

Mit pip v1.5.6 für Python v2.7.3 (GNU/Linux) ermöglicht die Option --root die Angabe eines globalen Installationspräfixes (scheinbar) unabhängig von den Optionen des jeweiligen Pakets. Versuchen Sie f.i.

$ pip install --root=/alternative/prefix/path package_name
0
sphakka

pip install /path/to/package/

ist jetzt möglich 

Der Unterschied dazu und bei Verwendung des Flags -e oder --editable besteht darin, dass -e mit dem Speicherort des Pakets (d. H. Dem Downloadordner) verknüpft ist, anstatt es in den Python-Pfad zu installieren.

Das heißt, wenn Sie das Paket löschen oder in einen anderen Ordner verschieben, können Sie es nicht verwenden.

0
A H