Installieren von Pip-Paketen im Ordner $ HOME

330

Ist es möglich? Installieren Sie pipbei der Installation die Python-Pakete in meinem $HOMEOrdner. (Zum Beispiel möchte ich installieren mercurial, verwenden pip, aber innen $HOMEstatt /usr/local)

Ich bin mit einem Mac unterwegs und habe nur über diese Möglichkeit nachgedacht, anstatt meine zu "verschmutzen" /usr/local, würde ich $HOMEstattdessen meine verwenden.

Bei PEP370 geht es genau darum. Ist nur das Erstellen eines ˜/.localund pip install packagegenug, um diese Pakete so zu gestalten, dass sie nur in meinem $ HOME-Ordner installiert werden?

Jemand benutzt Sie immer noch MS-DOS
quelle
Haben Sie virtualenv ausgecheckt? Sie können Pakete mit pip in einer isolierten Umgebung installieren.
Joet3ch
2
Ich habe darüber nachgedacht, aber ich möchte einige Python-Anwendungen mit dem vorhandenen Python (2.6.1) installieren, aber anstatt unter / usr / local / zu installieren, installieren Sie es in meinem Ordner $ HOME und fügen Sie es $ PATH hinzu. Ich möchte wissen, ob es möglich ist und welche Vorbehalte dieser Ansatz hat.
Jemand benutzt Sie immer noch MS-DOS
11
+1 für die Förderung von PEP370. Dies ist eine einfache, aber nützliche Option, über die mehr Menschen Bescheid wissen sollten.
Ned Deily
Ich kämpfte mit einem ähnlichen Problem (möglicherweise verursacht durch falsch konfiguriertes pip und easy_install für zwei verschiedene Pyhtons). Als letzten Ausweg habe ich versucht, Plain zu verwenden $ python setup.py --user install. Und es hat funktioniert. Das Paket ist jetzt zu Hause installiert und funktioniert wie erwartet. Muss mit meinem Serveradministrator sprechen.
Jan Vlcinsky
1
Wenn Sie PIP installieren müssen, machen Sie einfach etwas wie wget https://bootstrap.pypa.io/get-pip.pygefolgt von python get-pip.pyund Sie können loslegen. Könnte nützlich sein, wenn Sie sich auf einem Computer befinden, auf dem der installierte PIP zu alt ist (war bei mir der Fall). Weitere Informationen finden Sie unter pip.readthedocs.org/en/latest/installing.html .
Markus

Antworten:

463

Während Sie a verwenden können virtualenv, müssen Sie nicht. Der Trick besteht darin, das PEP370- --userArgument an das setup.pySkript zu übergeben. Mit der neuesten Version von pipist eine Möglichkeit, dies zu tun:

pip install --user mercurial

Dies sollte dazu führen, dass das hgSkript installiert wird $HOME/.local/bin/hgund der Rest des hg-Pakets in $HOME/.local/lib/pythonx.y/site-packages/.

Beachten Sie, dass dies für Python 2.6 gilt. Unter den Python-Kernentwicklern gab es einige Kontroversen darüber, welcher Verzeichnisort unter Mac OS X für userInstallationen im PEP370-Stil geeignet ist . In Python 2.7 und 3.2 wurde der Speicherort unter Mac OS X von $HOME/.localauf geändert $HOME/Library/Python. Dies kann sich in einer zukünftigen Version ändern. Derzeit sind jedoch unter 2.7 (und 3.2, sofern hgdies unter Python 3 unterstützt wurde) die oben genannten Speicherorte $HOME/Library/Python/x.y/bin/hgund $HOME/Library/Python/x.y/lib/python/site-packages.

Ned Deily
quelle
Guter Punkt. Leider gibt es in Python 2.7 einen Fehler, der dazu führt, dass PYTHONUSERBASE für OS X-Framework-Builds ignoriert wird. Es wird für Python 2.7.3 behoben.
Ned Deily
1
Das sieht sehr interessant aus. easy_installwird standardmäßig in Mac OS X installiert, daher hätte ich nur pip außerhalb des $HOMEOrdners installiert .
Jemand benutzt Sie immer noch MS-DOS
1
Ich habe versucht, die PYTHONUSERBASE an einen anderen Ort zu ändern. Kein Erfolg. Wie wird das speziell unter Windows gemacht?
Snerd
2
Beachten Sie, dass wenn Sie dies tun und dann versuchen, Conda-Umgebungen zu verwenden, die installierten Dateien .localimmer zuerst getroffen werden, was dazu führen kann , dass Importfehler nur sehr schwer aufgespürt werden können.
Tacaswell
12
Beachten Sie, dass sich unter OSX der bin-Ordner des Benutzer-Site-Verzeichnisses nicht in PATH befindet. Dies bedeutet, dass Skripts, die von Paketen im Benutzer-Site-Verzeichnis installiert werden, nur von Ihnen ausgeführt werden können export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron
21

Ich würde virtualenv in Ihrem HOME-Verzeichnis verwenden.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Sie können dann auch ändern ~/.(login|profile|bash_profile), je nachdem, was für Ihre Shell richtig ist, um ~ / bin zu Ihrem PATH hinzuzufügen, und dann pip|python|easy_installwird dies standardmäßig verwendet.

Ross Patterson
quelle
9
Der "de facto" Weg, dies zu tun, ist virtualenv venv, source venv/bin/activate. Möglicherweise möchten Sie Ihre virtuelle Umgebung nicht immer verwenden. Bei Verwendung dieser Methode wird Ihrer Eingabeaufforderung bei der Verwendung ein Präfix vorangestellt (venv).
Nyuszika7h
2
@ nyuszika7h Wir wissen, wie man virtualenv benutzt. Aber das beantwortet wirklich die Frage und ist eine sehr ordentliche Lösung.
Feuer
8
@itsafire Wer ist "wir"? Ich empfehle Ihnen, en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
Jedenfalls bin ich anderer Meinung, dies ist keine "ordentliche Lösung". Es ist ein sinnloser Hack.
Nyuszika7h
19

Sie können die -tOption ( --target) angeben, um das Zielverzeichnis anzugeben. Siehe pip install --helpfür detaillierte Informationen. Dies ist der Befehl, den Sie benötigen:

pip install -t path_to_your_home package-name

Um beispielsweise mxnet in meinem $HOMEVerzeichnis zu installieren, gebe ich Folgendes ein :

pip install -t /home/foivos/ mxnet
Foivos
quelle
Fehler erhalten distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Was bedeutet das?
Anthony Kong
Unter github.com/pypa/pip/issues/3826 finden Sie eine entsprechende Diskussion. Ich weiß nichts mehr darüber, aber ich habe in meinen Umgebungen nie ein Problem festgestellt.
Foivos