2012-07-20 16 views
13

Estoy siguiendo este post para hacer que una regla ipython todos los virtualenvs.Error de importación de IPython y python sys.path en general

Por lo que entiendo, la idea principal de la publicación es que cuando en un virtualenv, ipython no puede encontrar sus módulos.

(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 

Para evitar esto, añadir esto a mi/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") 

Este truco funciona para Balthazar. Pero en mi caso, me sale este

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 

pensé que tal vez debería añadir a /usr/lib/python2.7/dist-packages/IPython/externalsys.path en /usr/bin/ipython también. Lo que se ve es producido

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 

Este error en la línea 43 de IPython/__init__py, pero el anterior se produjo en la línea 46.

  1. ¿Cómo puedo hacer ipython trabajo con virtualenv?

  2. ¿Cómo se puede agregar /usr/lib/python2.7/dist-packages/IPython/external a sys.path dando como resultado un nuevo error?

  3. ¿Qué debo leer para obtener una mejor comprensión de la ruta de importación de python?

Gracias!

PS: IPython normales 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

puede publicar lo que ve si ejecuta 'import sys; imprime sys.path' en tu * normal * python? (es decir, el que instaló IPython contra) –

+0

Ahora después de agregar '/usr/lib/pymodules/python2.7', ipython parece funcionar. – zjk

+0

Bueno, parece que ha resuelto su problema (básicamente, verificando su ruta y luego averiguando qué es lo que realmente necesita agregar). Deberías publicar eso como respuesta a esta pregunta. –

Respuesta

9

IPython parece funcionar ahora!

Porque ipython no puede encontrar simplegeneric. Intenté localizar simplegeneric y encontré que simplegeneric está en '/usr/lib/pymodules/python2.7'. Después de agregar '/usr/lib/pymodules/python2.7', ipython funciona bien.

¡El comentario de Jeff Tratner realmente ayuda!

+0

Encontré el siguiente comando funcionó: PYTHONPATH =/usr/lib/python2.7/dist-packages ipython (esto fue en Ubuntu 12.04 con Python 2.7 dentro de un virtualenv) –

7

Si instala ipython3 utilizando apt-get, no tendrá ningún problema como ese.

En lugar de ipython, debe escribir ipython3 en el terminal.

Para Python 2 use ipython2.

+3

+1 !!! En mi caso, escribí "ipython2.7" para que funcione dentro del virtualenv. – jrvidotti

+0

+1: ** ipython2.7 qtconsole ** funciona ahora ... ¡donde solo ** ipython ** funcionó! Gracias por las correcciones hasta jrvidotti (fue una lucha) – wgw

3

Hacer cambios en la ruta no ayudó de ninguna manera. Sin embargo, ejecutar ipython como superusuario funcionó (¡aunque no estoy orgulloso de ello!)

sudo ipython 
+1

bien, resolvió el problema. ¿Pero quién puede explicar oficialmente por qué? o_O –

1

tuve la mismo problema, en mi caso, la causa fue que el directorio: /usr/lib/python2.7/dist-packages no se agregó a la ruta cuando se creó el entorno virtual (me gustaría saber por qué)

En mi caso lo siguiente en el terminal resuelto el problema:

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

Nota: Esto supone que está utilizando virtualenvwrapper

0

he experimentado alguna rareza en un nuevo huésped ubuntu, y se dio cuenta que estaba recibiendo diferentes comportamientos de mkvirtualenv en mac frente a ubuntu. Tengo más allá de esta diferencia con

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

Para mí, la solución era actualizar IPython de 0.13.2 a la actualidad más reciente 4.0.0.

1

pip install ipython en lugar de apt-get install ipython. El primero se instala en el virtualenv, este último se instala en los paquetes de su sistema python.