Installazione dei pacchetti pip nella cartella $ HOME


330

È possibile? Durante l'installazione pip, installa i pacchetti python nella mia $HOMEcartella. (ad esempio, voglio installare mercurial, usando pip, ma dentro $HOMEinvece di /usr/local)

Sono con un mac machine e ho pensato solo a questa possibilità, invece di "inquinare" il mio /usr/local, avrei usato il mio $HOME.

PEP370 è esattamente questo. Basta creare ˜/.locale fare pip install packageabbastanza per rendere questi pacchetti installabili solo nella mia cartella $ HOME?


Hai verificato virtualenv? È possibile installare pacchetti con pip in un ambiente isolato.
joet3ch,

2
Ci ho pensato, ma vorrei installare alcune applicazioni python usando il python esistente (2.6.1), ma invece di installare in / usr / local /, installalo nella mia cartella $ HOME e aggiungilo a $ PATH. Voglio sapere se è possibile e eventuali avvertenze di questo approccio.
Qualcuno usa ancora il tuo MS-DOS il

11
+1 per la promozione di PEP370. Questa è un'opzione semplice ma utile che più persone dovrebbero conoscere.
Ned Deily,

Stavo combattendo con un problema simile (probabilmente causato da pip errato e easy_install per due diversi pitoni). Come ultima risorsa, ho cercato di usare la pianura $ python setup.py --user install. E ha funzionato. Il pacchetto è ora installato a casa subdir e tutto funziona come previsto. Dovrà parlare con l'amministratore del mio server.
Jan Vlcinsky,

1
Se devi installare PIP, fai qualcosa come wget https://bootstrap.pypa.io/get-pip.pyseguito da python get-pip.pye sei a posto. Potrebbe essere utile se sei su una macchina in cui il PIP installato è troppo vecchio (era il caso per me). Vedi pip.readthedocs.org/en/latest/installing.html per maggiori informazioni.
Markus,

Risposte:


463

Mentre puoi usare a virtualenv, non è necessario. Il trucco sta passando l' --userargomento PEP370 allo setup.pyscript. Con l'ultima versione di pip, un modo per farlo è:

pip install --user mercurial

Ciò dovrebbe comportare l' hginstallazione dello script $HOME/.local/bin/hge il resto del pacchetto hg $HOME/.local/lib/pythonx.y/site-packages/.

Nota che quanto sopra è vero per Python 2.6. Ci sono state alcune controversie tra gli sviluppatori core di Python su quale sia la posizione della directory appropriata su Mac OS X per userinstallazioni in stile PEP370 . In Python 2.7 e 3.2, la posizione su Mac OS X è stata modificata da $HOME/.locala $HOME/Library/Python. Questo potrebbe cambiare in una versione futura. Ma, per ora, su 2.7 (e 3.2, se hgfossero supportati su Python 3), le posizioni sopra saranno $HOME/Library/Python/x.y/bin/hge $HOME/Library/Python/x.y/lib/python/site-packages.


Buon punto. Sfortunatamente, c'è un bug in Python 2.7 che fa sì che PYTHONUSERBASE venga ignorato per le build del framework OS X. Sarà risolto per Python 2.7.3.
Ned Deily,

1
Sembra molto interessante. easy_installviene installato in Mac OS X per impostazione predefinita, quindi avrei solo pip installato al di fuori della $HOMEcartella.
Qualcuno usa ancora il tuo MS-DOS il

1
Ho provato a cambiare il PYTHONUSERBASE in un'altra posizione. Nessun successo. Come viene fatto specificamente su Windows?
Snerd,

2
Attenzione, se lo fai e poi provi a usare ambienti conda, i file installati .localverranno sempre colpiti per primi, il che può portare a errori di importazione molto difficili da rintracciare.
Tacaswell,

12
Si noti che su OSX, la cartella bin della directory del sito dell'utente non si trova su PATH. Ciò significa che gli script installati dai pacchetti nella directory del sito dell'utente non saranno eseguibili a meno che l'utente export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron,

21

Vorrei usare virtualenv nella tua directory HOME.

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

Potresti quindi anche modificare ~/.(login|profile|bash_profile), a seconda di quale cosa è giusto che la tua shell aggiunga ~ / bin al tuo PERCORSO e che pip|python|easy_installsarebbe quello usato di default.


9
Il "de facto" modo per farlo è virtualenv venv, source venv/bin/activate. Potresti non voler necessariamente usare sempre virtualenv e, usando questo metodo, il tuo prompt ha il prefisso (venv)quando lo stai usando.
nyuszika7h,

2
@ nyuszika7h Sappiamo come usare virtualenv. Ma questo risponde davvero alla domanda ed è una soluzione molto accurata.
itsafire

8
@itsafire Chi è "noi"? Ti consiglio di leggere en.wikipedia.org/wiki/Weasel_word
nyuszika7h

3
Ad ogni modo, non sono d'accordo, questa non è una "soluzione pulita". È un trucco inutile.
nyuszika7h,

19

È possibile specificare l' -topzione ( --target) per specificare la directory di destinazione. Vedi pip install --helpper informazioni dettagliate. Questo è il comando che ti serve:

pip install -t path_to_your_home package-name

per esempio, per installare dire mxnet, nella mia $HOMEdirectory, scrivo :

pip install -t /home/foivos/ mxnet

Ottenere un errore distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Cosa significa?
Anthony Kong,

Controlla github.com/pypa/pip/issues/3826 per una discussione correlata. Non ne so altro, ma non ho mai riscontrato problemi nei miei ambienti.
Foivos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.