Instalowanie pakietów pip w folderze $ HOME

330

Czy to możliwe? Podczas instalacji pipzainstaluj pakiety python w moim $HOMEfolderze. (na przykład chcę zainstalować mercurial, używając pip, ale w środku $HOMEzamiast /usr/local)

/usr/localKorzystam z komputera Mac i pomyślałem o tej możliwości, zamiast „zanieczyszczać” moją , $HOMEzamiast tego skorzystam z mojej .

PEP370 właśnie o to chodzi. Czy wystarczy utworzyć a ˜/.locali zrobić pip install packagetyle, aby te pakiety były instalowane tylko w moim folderze $ HOME?

Ktoś nadal używa ciebie MS-DOS
źródło
Czy sprawdziłeś virtualenv? Możesz zainstalować pakiety z pipem w izolowanym środowisku.
joet3ch
2
Myślałem o tym, ale chciałbym zainstalować niektóre aplikacje Pythona przy użyciu istniejącego Pythona (2.6.1), ale zamiast instalować w / usr / local /, zainstaluj w moim folderze $ HOME i dodaj go do $ PATH. Chcę wiedzieć, czy to możliwe, i wszelkie zastrzeżenia dotyczące tego podejścia.
Ktoś nadal cię używa MS-DOS
11
+1 za promowanie PEP370. Jest to prosta, ale przydatna opcja, o której więcej osób powinno wiedzieć.
Ned Deily,
Walczyłem z podobnym problemem (prawdopodobnie spowodowanym przez źle skonfigurowaną pip i easy_install dla dwóch różnych pyhonów). W ostateczności próbowałem użyć zwykłego $ python setup.py --user install. I zadziałało. Pakiet jest teraz instalowany w podkatalogu home i wszystkie działa zgodnie z oczekiwaniami. Będę musiał porozmawiać z moim administratorem serwera.
Jan Vlcinsky
1
Jeśli chcesz zainstalować PIP, po prostu zrób coś takiego, wget https://bootstrap.pypa.io/get-pip.pya następnie python get-pip.pygotowe. Może się przydać, jeśli jesteś na komputerze, na którym zainstalowany PIP jest zbyt stary (tak było w moim przypadku). Aby uzyskać więcej informacji, zobacz pip.readthedocs.org/en/latest/installing.html .
Markus

Odpowiedzi:

463

Chociaż możesz użyć virtualenv, nie musisz. Sztuką jest przekazanie do skryptu --userargumentu PEP370 setup.py. W najnowszej wersji pipjednym ze sposobów jest:

pip install --user mercurial

Powinno to spowodować hgzainstalowanie skryptu $HOME/.local/bin/hgi resztę pakietu hg w $HOME/.local/lib/pythonx.y/site-packages/.

Zauważ, że powyższe odnosi się do Pythona 2.6. Odnotowano nieco kontrowersji wśród głównych programistów Python o tym, co jest właściwe położenie katalogu w systemie Mac OS X dla PEP370 stylu userinstalacji. W Python 2.7 i 3.2 lokalizacja w Mac OS X została zmieniona z $HOME/.localna $HOME/Library/Python. To może się zmienić w przyszłej wersji. Ale na razie w wersji 2.7 (i 3.2, jeśli hgbyły obsługiwane w języku Python 3) powyższymi lokalizacjami będą $HOME/Library/Python/x.y/bin/hgi $HOME/Library/Python/x.y/lib/python/site-packages.

Ned Deily
źródło
Słuszna uwaga. Niestety w Pythonie 2.7 występuje błąd, który powoduje ignorowanie PYTHONUSERBASE w kompilacjach frameworka OS X. Zostanie to naprawione w Pythonie 2.7.3.
Ned Deily,
1
To wygląda bardzo interesująco. easy_installjest domyślnie instalowany w Mac OS X, więc instalowałbym tylko pip poza $HOMEfolderem.
Ktoś nadal cię używa MS-DOS
1
Próbowałem zmienić PYTHONUSERBASE w inne miejsce. Bez powodzenia. Jak to się robi w systemie Windows?
Snerd
2
Uważaj, że jeśli to zrobisz, a następnie spróbujesz użyć środowisk conda, zainstalowane pliki .localzawsze będą trafiane jako pierwsze, co może prowadzić do bardzo trudnego do wyśledzenia błędów importu.
tacaswell
12
Zauważ, że w OSX folder bin katalogu witryny użytkownika nie znajduje się na PATH. Oznacza to, że skrypty zainstalowane przez pakiety w katalogu witryny użytkownika nie będą uruchamiane, chyba że użytkownik export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron,
21

Chciałbym użyć virtualenv w twoim katalogu HOME.

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

Możesz także zmienić ~/.(login|profile|bash_profile), w zależności od tego, co jest odpowiednie dla twojej powłoki, aby dodać ~ / bin do ŚCIEŻKI, a wtedy pip|python|easy_installbędzie to ta domyślnie używana.

Ross Patterson
źródło
9
„De facto” sposobem na to jest virtualenv venv, source venv/bin/activate. Nie zawsze możesz chcieć zawsze używać swojego virtualenv, a korzystając z tej metody, twój monit jest poprzedzony prefiksem, (venv)gdy go używasz.
nyuszika7h
2
@ nyuszika7h Wiemy, jak korzystać z virtualenv. Ale to naprawdę odpowiada na pytanie i jest bardzo schludnym rozwiązaniem.
itsafire
8
@itsafire Kim jest „my”? Polecam lekturę en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
W każdym razie nie zgadzam się, to nie jest „fajne rozwiązanie”. To bezcelowy hack.
nyuszika7h
19

Możesz określić -topcję ( --target), aby określić katalog docelowy. Zobacz pip install --helpszczegółowe informacje. Oto polecenie, którego potrzebujesz:

pip install -t path_to_your_home package-name

na przykład, aby zainstalować powiedz mxnet, w moim $HOMEkatalogu wpisuję :

pip install -t /home/foivos/ mxnet
Foivos
źródło
Otrzymuję błąd distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Co to znaczy?
Anthony Kong
Sprawdź github.com/pypa/pip/issues/3826, aby uzyskać powiązaną dyskusję. Nie wiem nic więcej na ten temat, ale nigdy nie spotkałem się z problemem w moim środowisku.
Foivos,