Вопрос по ipython, virtualenv, python – Ошибка импорта IPython и Python sys.path в целом

14

Я следую за этимсообщение сделать так, чтобы один 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

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

How can I make ipython work with virtualenv?

How can adding /usr/lib/python2.7/dist-packages/IPython/external to sys.path resulting a new error?

What should I read to get a better understanding of python import path?

Спасибо!

PS: нормальный 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']
Вы все еще можете использовать глобально установленный ipython, добавив указанный путь. zjk
похоже, вы решили свою проблему (в основном, проверив свой путь, а затем выяснив, что вам действительно нужно было добавить). Вы должны опубликовать это как ответ на этот вопрос. Jeff Tratner
Теперь после & apos; /usr/lib/pymodules/python2.7' добавил, что ipython, кажется, работает. zjk
У меня была эта ошибка, когда я был в virtualenv и пытался запустить ipython, когда ipython был установлен глобально, а не в virtualenv. hughdbrown
Вы можете опубликовать то, что вы видите, если вы запускаетеimport sys; print sys.path в вашемnormal питон? (то есть тот, против которого вы установили IPython) Jeff Tratner

Ваш Ответ

8   ответов
0

Я испытал некоторые странности на новом хосте Ubuntu и понял, что у меня mkvirtualenv на Mac отличается от поведения по сравнению с Ubuntu. Я преодолел эту разницу с

'mkvirtualenv --system-site-packages mynewenv'
9

IPython, кажется, работает сейчас!

Потому что ipython не может найти простой родовой. Я попытался найти simplegeneric и обнаружил, что simplegeneric находится в / ausr/lib/pymodules/python2.7&apos ;. После & amp; /usr/lib/pymodules/python2.7' будучи добавленным, ipython работает нормально.

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

Я обнаружил, что работает следующая команда: PYTHONPATH = / usr / lib / python2.7 / dist-packages ipython (это было в Ubuntu 12.04 с Python 2.7 внутри virtualenv)
7

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

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

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

+1 !!! В моем случае я набрал «ipython2.7» заставить его работать внутри virtualenv.
+1: ipython2.7 qtconsole работает сейчас ... где толькоipython работал! Спасибо за исправления вплоть до jrvidotti (это была борьба)
2

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

3

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

sudo ipython
хорошо, это решило проблему. Но кто может официально объяснить, почему? о_О
0

В моем случае это был пакет выше в моем настраиваемом пути Python с именем & quot; path & quot; это было причиной ImportError из:

import IPython.external.path as path

Увидетьhttps://github.com/ipython/ipython/issues/3994

0

Аналогичныйtraceback Я испытал сpython 3.5.4 а такжеpip 10.0.1 после установкиipython успешно.

line 32, in <module>
from .debugger import TerminalPdb, Pdb
File "/usr/lib/python3.5/site-packages/IPython/terminal/debugger.py", line 6, in <module>
    from IPython.core.completer import IPCompleter
File "/usr/lib/python3.5/site-packages/IPython/core/completer.py", line 137, in <module>
    from IPython.utils import generics
File "/usr/lib/python3.5/site-packages/IPython/utils/generics.py", line 8, in <module>
from simplegeneric import generic
ImportError: No module named 'simplegeneric'

обновление или установкаsimplegeneric т.е.sudo pip install simplegeneric --upgrade я получил

Requirement already up-to-date: simplegeneric in /usr/lib/python3.5/site-packages (0.8.1)

После некоторой пробной версии я искал в google / stackoverflow, чтобы узнать, сталкивался ли кто-нибудь еще с подобной проблемой и нашел это. И его ответ @zjk, который помогает мне найти решение.

Solutions: Нашел толькоegg папка вpython3.5 установленный пакет реж. Поэтому я удалил их и заново установилsimplegeneric.

sudo rm -rf /usr/lib/python3.5/site-packages/simplegeneric-0.8.1-py3.5.egg-info/
sudo pip install simplegeneric

после этого ipython работал как шарм.

N.B: Я устанавливаю пакет на системном уровне, поэтомуsudo требуется.

0

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

Похожие вопросы