2014-04-22 13 views
7

Generalmente uso IPython e solo di recente ho notato che il percorso di ricerca per le importazioni è errato nella normale shell python. Da quello che ho capito, sys.path eredita da PYTHONPATH (anche se non so dove vive PYTHONPATH), questo è diverso in IPython? Sono preoccupato che questa installazione avvenga. Per esempio ho appena provatoIPython sys.path diverso da python sys.path

pip install --upgrade gensim 

che non è riuscito perché non potrebbe risolvere la dipendenza SciPy, che ho già installato. Così mi sono tuffato un po 'più profondo e trovato in ipython

import gensim 
gensim.__version__ 

rendimenti .9.1 mentre in pitone

import gensim 
gensim.__version__ 

rendimenti .8.9

Ecco ciò che la versione ipython di sys.path assomiglia a:

['', 
    '/Users/change/anaconda/bin', 
    '/Users/change/anaconda/lib/python2.7/site-packages/pybing-0.12-py2.7.egg', 
    '/Users/change/anaconda/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg', 
    '/Users/change/anaconda/python.app/Contents/lib/python27.zip', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-darwin', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-mac', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-mac/lib-scriptpackages', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-tk', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-old', 
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-dynload', 
    '/Users/change/anaconda/lib/python2.7/site-packages', 
    '/Users/change/anaconda/lib/python2.7/site-packages/PIL', 
    '/Users/change/anaconda/lib/python2.7/site-packages/pygoogle', 
    '/Users/change/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info', 
    '/Users/change/anaconda/lib/python2.7/site-packages/IPython/extensions'] 

e il normale python s sys.path cripta:

['', 
'/Users/change/anaconda/lib/python2.7/site-packages/pybing-0.12-py2.7.egg', 
'/Users/change/anaconda/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg', 
'/Users/change/anaconda/lib/python27.zip', 
'/Users/change/anaconda/lib/python2.7', 
'/Users/change/anaconda/lib/python2.7/plat-darwin', 
'/Users/change/anaconda/lib/python2.7/plat-mac', 
'/Users/change/anaconda/lib/python2.7/plat-mac/lib-scriptpackages', 
'/Users/change/anaconda/lib/python2.7/lib-tk', 
'/Users/change/anaconda/lib/python2.7/lib-old', 
'/Users/change/anaconda/lib/python2.7/lib-dynload', 
'/Users/change/anaconda/lib/python2.7/site-packages', 
'/Users/change/anaconda/lib/python2.7/site-packages/PIL', 
'/Users/change/anaconda/lib/python2.7/site-packages/pygoogle', 
'/Users/change/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info'] 
+0

Per informazioni sul funzionamento della sys.path, vedere questa risposta http://stackoverflow.com/a/38403654/ 850326 – djhaskin987

risposta

3

probabilmente è troppo tardi per voi, ma la risposta qui può aiutare anche voi: ipython reads wrong python version. Fondamentalmente lo script ipython può fare riferimento direttamente ad uno specifico binario python piuttosto che a quello che si otterrebbe se si eseguisse direttamente python.

+0

Il primo commento sotto la domanda del tuo link mi ha aiutato. – scottlittle

0

Ho avuto una versione installata brew di Python sul mio mac. Per qualche ragione che non potrebbe usare le librerie di sistema. Dopo brew uninstall python ha funzionato di nuovo, perché il python predefinito è stato riportato a/usr/bin/python.

anche giocare intorno con which python, which ipython e l'apertura/usr/bin/python,/usr/local/bin/python,/usr/bin/ipython e/usr/local/bin/ipython e facendo le importazioni là potrebbe aiutarti a scoprire dove sta andando esattamente storto.

+0

Mac ha problemi di wierd quando si impostano 'sys.path' e' sys.executable' su macs, perché deve indovinare dove si trova il vero eseguibile python; DARWIN non passa l'intero percorso di python a se stesso. :( – djhaskin987

0

È possibile che venga attivato il proprio ambiente virtuale che ignora il percorso del sistema.

Può essere fissato eseguendo questo terminale (Dopo aver chiuso notebook, ecc):

virtualenv --system-site-packages ~