2015-05-19 20 views
5

Non riesco più ad aggiornare un pacchetto già installato in Ubuntu 15.04. Pip funziona ancora, installando il pacchetto in /usr/local/python2.7/dist-packages, ma il percorso elenca /usr/python2.7/dist-packages nella parte superiore e persino PYTHONPATH non può ottenere qualcosa sopra quella linea. Credo che questo funzioni nei più vecchi Ubuntus. Ho cercato di trovare qualcosa in /usr/python/site.py, ma sembra fare la cosa giusta. L'aggiunta di -S sembra impedire alla versione non locale di essere in cima. Ho visto questo su due computer, credo.Pip non può aggiornare un pacchetto integrato in Ubuntu 15.04

Alcuni esempi della necessità di questo: Aggiornamento per ottenere una funzione/correzione di errore richiesta (per PILLOW, nel mio caso) senza APT che disinstalla un gruppo di pacchetti che elencano quel pacchetto come requisito.

Modifica: Per chiarimenti, la domanda è: Voglio riordinare l'ordine di ricerca della directory per recuperare il comportamento di Ubuntu 14.10. Ci sono modi migliori per farlo su molti sistemi, ma voglio usare il pacchetto integrato di apt, solo con uno o due (potenziali) nuovi pacchetti, come IPython e simili, piuttosto che usare virtual-env e Anacoda (entrambi che uso su altri sistemi). Sembra che il mio comportamento desiderato sia il comportamento Debian documentato, quindi non sono sicuro del motivo per cui sta riordinando il percorso.

Ecco il percorso per dimostrare il problema, si noti la variabile PYTHONPATH è nel mezzo, con due cartelle git:

>>> sys.path 
['', 
'/usr/lib/python2.7/dist-packages', 
'/usr/local/lib/python2.7/dist-packages/requests-2.6.0-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/octave_kernel-0.10.0-py2.7.egg', 
'/home/username/git/maya', 
'/home/username/git/udaq/pyUDAQ', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/pymodules/python2.7', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client', 
'/usr/lib/python2.7/dist-packages/wx-3.0-gtk2'] 

Per avere un riferimento, ho un sistema di ricerca in esecuzione 14.04, ed ha esattamente l'atteso comportamento. I due PYTHONPATH dirs vengono prima, poi poi in seguito locale dist-packages sono al di sopra del costruito in.

+4

Penso che lasciare che 'pip' e' apt' litighino sui pacchetti è una pessima idea. Un modo molto più pulito sarebbe invece passare a 'virtualenvs'. – cel

+0

Voglio essere in grado di consegnare il mio computer a qualcuno che segue le indicazioni ma non ne sa molto. Dicendogli "ipython notebook" è più facile che dovergli dire di attivare prima un virtual env. Questa è generalmente una buona idea, però. –

+0

In tal caso: passa a 'anaconda' e installa i pacchetti nell'ambiente di root.Quindi 'conda' e' pip' ora sono i gestori dei pacchetti e 'apt' non interferirà. – cel

risposta

2

C'è un -t switch in pip. Ti permette di configurare una directory dove pip installa i pacchetti.

È possibile impostare la directory in un config file e dimenticare specificando ogni volta che si installare o aggiornare pacchetti

ma in generale è una cattiva idea quella di aggiornare i pacchetti installati da apt

+0

Non voglio eseguire il bulldozer dei pacchetti in/usr/python, voglio solo cercare/usr/local/python' prima. Grazie comunque! –

+1

@HenrySchreiner Ok, ma poi sono sorpreso, perché i percorsi da 'PYTHONPATH' saranno aggiunti a' sys.path' prima dei percorsi degli interpreti standard. Puoi aggiornare il tuo post con ulteriori informazioni? Come si modifica 'PYTHONPATH' e cosa produce l'output di' print sys.path'? – Alik

+0

@HenrySchreiner [collegamento della documentazione pertinente] (https://docs.python.org/2/tutorial/modules.html#the-module-search-path) – Alik

2

Usa virtualenv:

installare virtualenv

$ sudo apt-get install python-virtualenv 

creare ambiente nella directory myenv

$ virtualenv MYENV 

ambiente Attiva nella shell corrente (la vostra applicazione avrà bisogno di questo e su di esso è l'avvio di script)

$ . MYENV/bin/activate 

uso pip/python dal venv si trova nella directory myenv (di possedere)

(MYENV)$ pip ... 
+0

Se sei su Ubuntu e 16.04 o successivi, probabilmente vorrai 'sudo apt-get install virtualenv' invece di' python-virtualenv' –

Problemi correlati