Installare un pacchetto di Python in una directory diversa utilizzando pip?

StackOverflow https://stackoverflow.com/questions/2915471

  •  04-10-2019
  •  | 
  •  

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?

È stato utile?

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top