2012-07-20 3 views
13

Sto seguendo questo post per rendere una regola ipython tutti i virtualenvs.Errore di importazione IPython e python sys.path in generale

Da quello che ho capito, l'idea principale del post è che quando in un virtualenv, ipython non riesce a trovare i suoi moduli.

(a-virtualenv)[email protected]:~$ ipython 
Traceback (most recent call last): 
    File "/usr/bin/ipython", line 19, in <module> 
    from IPython.frontend.terminal.ipapp import launch_new_instance 
ImportError: No module named IPython.frontend.terminal.ipapp 

Per ovviare a questo, aggiungo questo al mio/usr/bin/ipython

import sys 
if "/usr/lib/python2.7/dist-packages" not in sys.path: 
    sys.path.append("/usr/lib/python2.7/dist-packages") 

Questo trucco funziona per Balthazar. Ma nel mio caso, ho questa

Traceback (most recent call last): 
    File "/usr/bin/ipython", line 18, in <module> 
    from IPython.frontend.terminal.ipapp import launch_new_instance 
    File "/usr/lib/python2.7/dist-packages/IPython/__init__.py", line 46, in <module> 
    from .frontend.terminal.embed import embed 
    File "/usr/lib/python2.7/dist-packages/IPython/frontend/terminal/embed.py", line 37, in <module> 
    from IPython.frontend.terminal.ipapp import load_default_config 
    File "/usr/lib/python2.7/dist-packages/IPython/frontend/terminal/ipapp.py", line 38, in <module> 
    from IPython.core.completer import IPCompleter 
    File "/usr/lib/python2.7/dist-packages/IPython/core/completer.py", line 84, in <module> 
    from IPython.utils import generics 
    File "/usr/lib/python2.7/dist-packages/IPython/utils/generics.py", line 19, in <module> 
    from IPython.external.simplegeneric import generic 
    File "/usr/lib/python2.7/dist-packages/IPython/external/simplegeneric/__init__.py", line 4, in <module> 
    from _simplegeneric import * 
ImportError: No module named _simplegeneric 

ho pensato che forse dovrei aggiungere /usr/lib/python2.7/dist-packages/IPython/external a sys.path in /usr/bin/ipython pure. Quello che ottengo è

Traceback (most recent call last): 
    File "/usr/bin/ipython", line 18, in <module> 
    from IPython.frontend.terminal.ipapp import launch_new_instance 
    File "/usr/lib/python2.7/dist-packages/IPython/__init__.py", line 43, in <module> 
    from .config.loader import Config 
    File "/usr/lib/python2.7/dist-packages/IPython/config/loader.py", line 27, in <module> 
    from IPython.utils.path import filefind, get_ipython_dir 
    File "/usr/lib/python2.7/dist-packages/IPython/utils/path.py", line 24, in <module> 
    from IPython.utils.process import system 
    File "/usr/lib/python2.7/dist-packages/IPython/utils/process.py", line 27, in <module> 
    from ._process_posix import _find_cmd, system, getoutput, arg_split 
    File "/usr/lib/python2.7/dist-packages/IPython/utils/_process_posix.py", line 27, in <module> 
    from IPython.utils import text 
    File "/usr/lib/python2.7/dist-packages/IPython/utils/text.py", line 27, in <module> 
    from IPython.external.path import path 
ImportError: cannot import name path 

Questo errore si è verificato sulla linea 43 della IPython/__init__py, ma quello precedente si è verificato sulla linea 46.

  1. Come posso fare ipython lavoro con virtualenv?

  2. In che modo l'aggiunta di /usr/lib/python2.7/dist-packages/IPython/external a sys.path genera un nuovo errore?

  3. Cosa devo leggere per ottenere una migliore comprensione del percorso di importazione di Python?

Grazie!

PS: normale IPython sys.path

['', 
'/usr/bin', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/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', 
'/usr/lib/python2.7/dist-packages/PIL', 
'/usr/lib/python2.7/dist-packages/gst-0.10', 
'/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/ubuntuone-client', 
'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', 
'/usr/lib/python2.7/dist-packages/ubuntuone-couch', 
'/usr/lib/python2.7/dist-packages/ubuntuone-installer', 
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', 
'/usr/lib/python2.7/dist-packages/IPython/extensions'] 
+2

puoi pubblicare ciò che vedi se esegui 'import sys; stampa sys.path nel tuo * normale * python? (cioè quello su cui è stato installato IPython) –

+0

Ora dopo l'aggiunta di "/usr/lib/pymodules/python2.7", ipython sembra funzionare. – zjk

+0

beh, sembra che tu abbia risolto il tuo problema (fondamentalmente, controllando il tuo percorso e quindi cercando di capire cosa hai effettivamente bisogno di aggiungere). Dovresti postare come risposta a questa domanda. –

risposta

9

IPython sembra funzionare ora!

Perché ipython non riesce a trovare simplegeneric. Ho provato a localizzare simplegeneric e ho trovato simplegeneric in '/usr/lib/pymodules/python2.7'. Dopo aver aggiunto "/usr/lib/pymodules/python2.7", ipython funziona correttamente.

Il commento di Jeff Tratner aiuta davvero!

+0

Ho trovato il seguente comando funzionante: PYTHONPATH =/usr/lib/python2.7/dist-packages ipython (questo era su Ubuntu 12.04 con Python 2.7 all'interno di una virtualenv) –

7

Se si installa ipython3 utilizzando apt-get, non si verifichino problemi di questo tipo.

Invece di ipython, è necessario digitare ipython3 sul terminale.

Per Python 2 utilizzare ipython2.

+3

+1 !!! Nel mio caso, ho digitato "ipython2.7" per farlo funzionare all'interno del virtualenv. – jrvidotti

+0

+1: ** ipython2.7 qtconsole ** funziona ora ... dove solo ** ipython ** ha funzionato! Grazie per le correzioni fino a jrvidotti (era una lotta) – wgw

3

Apportare modifiche al percorso non ha aiutato in alcun modo. Comunque l'esecuzione di ipython come un super utente ha funzionato (anche se non ne sono orgoglioso!)

sudo ipython 
+1

ok, ha risolto il problema. Ma chi può spiegare ufficialmente perché? o_O –

0

Nel mio caso, si trattava di un pacchetto più in alto nel mio percorso Python personalizzato denominato "percorso" che stava causando l'ImportError da:

import IPython.external.path as path 

Vedi https://github.com/ipython/ipython/issues/3994

1

ho avuto la lo stesso problema, nel mio caso la causa era che la directory: /usr/lib/python2.7/dist-packages non è stata aggiunta al percorso quando è stato creato l'ambiente virtuale (mi piacerebbe sapere perché)

Nel mio caso quanto segue nel terminale risolto il problema:

workon 'your_environment_here' 
add2virtualenv /usr/lib/python2.7/dist-packages 

Nota: Questo presuppone che si sta utilizzando virtualenvwrapper

0

ho sperimentato qualche stranezza in un nuovo ospite ubuntu, e realizzato mi è stato sempre comportamenti diversi per mkvirtualenv su mac contro l'ubuntu. Ho passato questa differenza con

'mkvirtualenv --system-site-packages mynewenv' 
0

Per me, la soluzione era quella di aggiornare IPython da 0.13.2 al momento più recente 4.0.0.

1

pip install ipython anziché apt-get install ipython. Il primo si installa nel virtualenv, quest'ultimo si installa nei pacchetti python di sistema.