Подтвердить что ты не робот

Ошибка импорта IPython и python sys.path в целом

Я следую за этим сообщением , чтобы сделать одно правило ipython всеми virtualenvs.

Из того, что я понимаю, основная идея сообщения заключается в том, что когда в virtualenv ipython не может найти свои модули.

(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

Чтобы обойти это, я добавляю это в свой /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")

Этот трюк работает на Бальтазаре. Но в моем случае я получаю это

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

Я подумал, может быть, мне стоит добавить /usr/lib/python2.7/dist-packages/IPython/external в sys.path в /usr/bin/ipython. Я получаю

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

Эта ошибка произошла в строке 43 IPython/__init__py, но предыдущая произошла в строке 46.

  • Как я могу заставить ipython работать с virtualenv?

  • Как добавить /usr/lib/python2.7/dist-packages/IPython/external в sys.path, что приведет к новой ошибке?

  • Что я должен прочитать, чтобы лучше понять путь импорта python?

Спасибо!

PS: обычный IP-адрес 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']
4b9b3361

Ответ 1

Теперь IPython работает!

Потому что ipython не может найти simplegeneric. Я попытался найти simplegeneric и нашел simplegeneric в '/usr/lib/pymodules/python2.7'. После добавления '/usr/lib/pymodules/python2.7' ipython отлично работает.

Комментарий Джеффа Тратнера действительно помогает!

Ответ 2

Если вы установите ipython3 с помощью apt-get, у вас не возникнет таких проблем.

Вместо ipython, вы должны ввести ipython3 на терминал.

Для Python 2 используйте ipython2.

Ответ 3

Внесение изменений в путь никоим образом не помогло. Однако работает ipython в качестве суперпользователя (хотя я не горжусь этим!)

sudo ipython

Ответ 4

У меня была такая же проблема, в моем случае причина этого в том, что каталог:/usr/lib/python2.7/dist-packages не был добавлен в путь при создании виртуальной среды (я хотел бы знать почему)

В моем случае следующее в терминале решило проблему:

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

Примечание. Предполагается, что вы используете virtualenvwrapper

Ответ 5

pip install ipython вместо apt-get install ipython. Первая устанавливает в virtualenv, последняя устанавливает в пакеты вашей системы python.

Ответ 6

В моем случае это был пакет выше в моем настраиваемом пути Python с именем "путь", который вызывал ImportError:

import IPython.external.path as path

См. https://github.com/ipython/ipython/issues/3994

Ответ 7

Я испытал некоторую странность в новом узле ubuntu и понял, что у меня возникают разные поведения для mkvirtualenv на mac против ubuntu. Я преодолел эту разницу с помощью

'mkvirtualenv --system-site-packages mynewenv'

Ответ 8

Для меня решение состояло в том, чтобы обновить IPython от 0.13.2 до новейшего 4.0.0.