Installare un pacchetto di Python in una directory diversa utilizzando pip?
Domanda
So che la risposta ovvia è quella di utilizzare virtualenv e virtualenvwrapper, ma per vari motivi non posso / non vogliono farlo.
Quindi, come faccio a modificare il comando
pip install package_name
per rendere pip
installare il pacchetto altrove rispetto alla site-packages
predefinita?
Soluzione
Usa:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
Si potrebbe anche decidere di utilizzare --ignore-installed
per forzare tutte le dipendenze per essere reinstallati utilizzando questo nuovo prefisso. È possibile utilizzare --install-option
a più volte per aggiungere una qualsiasi delle opzioni è possibile utilizzare con python setup.py install
(--prefix
è probabilmente quello che volete, ma ci sono un mucchio più opzioni è possibile utilizzare).
Altri suggerimenti
Il href="https://pip.pypa.io/en/latest/reference/pip_install/#cmdoption-t" rel="noreferrer"> --target interruttore
Ma è comunque necessario aggiungere -t, --target pip install --target=d:\somewhere\other\than\the\default package_name
d:\somewhere\other\than\the\default
a PYTHONPATH
effettivamente usarli da quella posizione.
Installare i pacchetti in
Utilizzare --upgrade per sostituire i pacchetti esistenti in
pip aggiornamento se l'interruttore di destinazione non è disponibile:
Su Linux o OS X:
pip install -U pip
In Windows (questo funziona in tutto un problema ):
python -m pip install -U pip
Al posto dell'opzione --target
o l'opzione --install-options
, ho trovato che la seguente funziona bene (della discussione su un bug per quanto riguarda questo molto cosa alla https://github.com/pypa/pip/issues/446 ):
PYTHONUSERBASE=/path/to/install/to pip install --user
(o impostare la directory PYTHONUSERBASE
nel proprio ambiente prima di eseguire il comando, utilizzando export PYTHONUSERBASE=/path/to/install/to
)
Questa utilizza l'opzione --user
molto utile, ma gli dice di fare la bin
, lib
, share
e altre directory che ci si aspetta in un prefisso personalizzato piuttosto che $HOME/.local
.
Quindi è possibile aggiungere questo alla tua PATH
, PYTHONPATH
e altre variabili, come si farebbe con una directory di installazione normale.
Si noti che potrebbe essere necessario specificare le opzioni --upgrade
e --ignore-installed
se tutti i pacchetti in cui il presente dipende richiedono versioni più recenti per essere installato nella directory PYTHONUSERBASE
, di ignorare le versioni forniti dal sistema.
Un esempio completo:
PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy
.. per installare il pacchetto di scipy
e numpy
versioni più recenti in una directory che poi è possibile includere nel vostro PYTHONPATH
in questo modo (usando bash e per Python 2.6 su CentOS 6 per questo esempio):
export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH
Uso virtualenv è ancora una soluzione migliore e più ordinato!
L'installazione di un pacchetto di Python spesso include solo alcuni file Python puri. Se il pacchetto include i dati, script e o eseguibili, questi sono installati in diverse directory dai file Python puri.
Supponendo che il pacchetto non ha dati / scripts / eseguibili, e che si desidera che i file vostro Python di andare in /python/packages/package_name
(e non qualche sottodirectory alcuni livelli al di sotto /python/packages
come quando si usa --prefix
), è possibile utilizzare il comando una sola volta:
pip install --install-option="--install-purelib=/python/packages" package_name
Se si desidera che tutti (o quasi) i pacchetti di andare lì, è possibile modificare il ~/.pip/pip.conf
per includere:
[install]
install-option=--install-purelib=/python/packages
In questo modo, non si può dimenticare di dover specificare ancora e ancora.
Tutti i excecutables / dati / script inclusi nel pacchetto sarà ancora andare al loro posto di default se non si specifica inoltre le opzioni di installazione (--prefix
/ --install-data
/ --install-scripts
, ecc, per i dettagli vedi il installazione personalizzata opzioni).
Per PIP installare una libreria esattamente dove volevo, ho navigato per la posizione che volevo la directory con il terminale poi utilizzato
pip install mylibraryName -t .
la logica che ho preso da questa pagina: https://cloud.google.com/appengine / docs / python / googlecloudstorageclient / scaricare
Nessuno sembra aver menzionato l'opzione -t, ma che il più semplice:
pip install -t <direct directory> <package>
Basta aggiungere un punto alla risposta di @Ian Bicking:
Con l'opzione --user
per specificare la directory installato anche il lavoro se si vuole installare alcuni pacchetti di Python nella propria home directory (senza diritto dell'utente sudo) sul server remoto.
per es.,
pip install --user python-memcached
Il comando installerà il pacchetto in una delle directory che elencato nel vostro PYTHONPATH.
Le versioni più recenti di pip
(8 o successive) può usare direttamente il opzione --prefix
:
pip install --prefix=$PREFIX_PATH package_name
dove $PREFIX_PATH
è il prefisso di installazione in cui sono collocate le cartelle lib, bin e con altri ad alto livello.
Testato queste opzioni con python3.5 e pip 9.0.3:
pip installare --target / myfolder [pacchetti]
pacchetti installa tutti incluse le dipendenze sotto myfolder /. non tiene conto del fatto che pacchetti dipendenti sono già installati altrove in Python. Troverete pacchetti da / myfolder / [package_name]. Nel caso in cui si dispone di più versioni di Python, questo non tenerne conto (nessuna versione di Python in package nome della cartella).
pip installare --prefix / myfolder [pacchetti]
I controlli sono dipendenze già installato. Sarà installare i pacchetti in /myfolder/lib/python3.5/site-packages/[packages]
pip installare --root / myfolder [pacchetti]
Controlli dipendenze come --prefix ma percorso di installazione sarà /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip installare --user [pacchetti]
Sarà installare i pacchetti in $ HOME: /home/[USER]/.local/lib/python3.5/site-packages Python cerca automaticamente di questo percorso .local in modo che non c'è bisogno di aggiungerlo ai vostri PYTHONPATH.
=> Nella maggior parte dei casi --user è la migliore opzione per l'uso. Nel caso in cui la cartella principale non può essere utilizzato a causa di qualche ragione, allora --prefix.
pip install packageName -t pathOfDirectory
o
pip install packageName --target pathOfDirectorty
Per aggiungere al già buon consiglio, come ho avuto un problema l'installazione di IPython quando ho didn 't hanno i permessi di scrittura /usr/local
.
usi pip distutils turistiche sua installazione e illustrano questa discussione come questo possa causare una problema in quanto si basa sulla impostazione sys.prefix
.
Il mio problema è accaduto quando l'IPython install ha tentato di scrivere '/ usr / local / share / man / man1' con Permesso negato . Come il guasto sostituire non sembrava di scrivere i file ipython nella directory bin.
Uso di "--user" ha funzionato ei file sono stati scritti in ~ / .local. L'aggiunta di ~ / .local / bin al $ PATH significava ho potuto utilizzare "ipython" da lì.
Comunque sto cercando di installare questo per un numero di utenti e era stato dato il permesso di scrittura alla directory /usr/local/lib/python2.7
. Ho creato una directory "bin" là sotto e direttive impostate per Distutils:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
allora (-I
viene utilizzato per forzare l'installazione nonostante precedenti fallimenti / .local install):
pip install -I ipython
Poi ho aggiunto /usr/local/lib/python2.7/bin
a $PATH
.
ho pensato di includere questo nel caso qualcuno altro ha problemi simili su una macchina che non hanno accesso a sudo.
Se si utilizza birra con Python, purtroppo, PIP / navi PIP3 con opzioni molto limitate. Non si dispone --install-opzione, --target, opzioni --user come detto sopra.
Nota sulla pip install --user
Il pip normale installazione --user è disabilitata per prodotta Python. Questo è causa di un bug nel distutils, perché Homebrew scrive una distutils.cfg che definisce il prefisso del pacchetto. Una possibile soluzione (che mette script eseguibili in ~ / Library / Python /./ bin) è:python -m pip install --user --install-option="--prefix=" <package-name>
Si potrebbe trovare questa linea molto ingombrante. Suggerisco uso pyenv per la gestione. Se si utilizza
brew upgrade python python3
Per ironia della sorte si sono in realtà downgrade la funzionalità PIP.
(I inviare questa risposta, semplicemente perché pip nel mio Mac OSX non ha l'opzione --target, e ho trascorso ore di fissaggio it)
pip install /path/to/package/
è ora possibile.
La differenza con questo e con il flag -e
o --editable
è che i link -e
a dove il pacchetto viene salvato (vale a dire la cartella download), invece di installarlo nel vostro percorso di python.
Questo significa che se si elimina / sposta il pacchetto in un'altra cartella, non sarà in grado di utilizzarlo.
Con pip v1.5.6
su Python v2.7.3
(GNU / Linux), l'opzione --root
permette di specificare un prefisso di installazione globale, (apparentemente) a prescindere dalla possibilità di pacchetto specifico. Prova f.i.,
$ pip install --root=/alternative/prefix/path package_name
suggerisco di seguire la documentazione e creare il file ~ / .pip / pip.conf. Nota nella documentazione ci mancano directory specificata di testa, che porta a seguente errore:
error: install-base or install-platbase supplied, but installation scheme is incomplete
Il contenuto di lavoro pieno di file di configurazione è:
[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
Purtroppo posso installare, ma se provo ad pip disinstallazione mi dice non c'è tale pacchetto per processo di disinstallazione .... quindi qualcosa è ancora sbagliato, ma il pacchetto va alla sua posizione predefinita.