Ошибка импорта 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']
Ответы
Ответ 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.