一般来说IPython导入失败和python sys.path

zjk*_*zjk 14 python virtualenv ipython

我正在按照这篇文章制作一个ipython规则所有的virtualenvs.

根据我的理解,该帖子的主要思想是,当在virtualenv中,ipython无法找到它的模块.

(a-virtualenv)me@pc:~$ 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
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,我将其添加到我的/ 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")
Run Code Online (Sandbox Code Playgroud)

这个技巧适用于Balthazar.但就我而言,我明白了

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
Run Code Online (Sandbox Code Playgroud)

我想,也许我应该添加/usr/lib/python2.7/dist-packages/IPython/externalsys.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
Run Code Online (Sandbox Code Playgroud)

此错误发生在第43行IPython/__init__py,但前一行发生在第46行.

  1. 如何让ipython与virtualenv一起工作?

  2. 怎样才能加入/usr/lib/python2.7/dist-packages/IPython/externalsys.path产生的新的错误?

  3. 为了更好地理解python导入路径,我应该阅读什么?

谢谢!

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']
Run Code Online (Sandbox Code Playgroud)

zjk*_*zjk 9

IPython现在似乎工作了!

因为ipython找不到simplegeneric.我试图找到simplegeneric,发现simplegeneric在'/usr/lib/pymodules/python2.7'中.在添加'/usr/lib/pymodules/python2.7'之后,ipython工作正常.

Jeff Tratner的评论真有帮助!


Ish*_*mar 7

如果你安装ipython3使用apt-get,你不会遇到任何类似的问题.

而不是ipython,你应该ipython3在终端上输入.

对于Python 2使用ipython2.

  • +1!在我的例子中,我键入"i​​python2.7"以使其在virtualenv中工作. (3认同)