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

时间:2012-07-20 06:18:51

标签: python virtualenv ipython

我正在关注这个post以制作一个ipython规则所有的虚拟现实。

根据我的理解,这篇文章的主要思想是,在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

要解决此问题,我将其添加到我的/ 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")

这个技巧适用于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

我想也许我应该在/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

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

  1. 如何让ipython与virtualenv一起使用?

  2. 如何将/usr/lib/python2.7/dist-packages/IPython/external添加到sys.path会导致新错误?

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

  4. 谢谢!

    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']
    

9 个答案:

答案 0 :(得分:9)

IPython现在似乎有用了!

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

Jeff Tratner的评论确实有帮助!

答案 1 :(得分:7)

如果您使用ipython3安装apt-get,则不会遇到任何问题。

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

对于Python 2,请使用ipython2

答案 2 :(得分:3)

对路径进行更改并没有任何帮助。然而,作为一个超级用户运行ipython工作(虽然我并不为此感到自豪!)

sudo ipython

答案 3 :(得分:3)

pip install ipython代替apt-get install ipython。前者安装在virtualenv中,后者安装到你的系统python包中。

答案 4 :(得分:1)

我遇到了同样的问题,在我的情况下,原因是目录:/usr/lib/python2.7/dist-packages在创建虚拟环境时没有添加到路径中(我想知道为什么)

在我的情况下,终端中的以下内容解决了问题:

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

注意:这假设您使用的是virtualenvwrapper

答案 5 :(得分:0)

在我的例子中,它是我的自定义Python路径中名为“path”的更高版本的包,它导致了ImportError:

import IPython.external.path as path

请参阅https://github.com/ipython/ipython/issues/3994

答案 6 :(得分:0)

我在一个新的ubuntu主机中经历了一些奇怪的事情,并意识到我在mac上与mbuvirtualenv有不同的行为而不是ubuntu。

我克服了这个不同之处
'mkvirtualenv --system-site-packages mynewenv'

答案 7 :(得分:0)

对我来说,解决方案是将升级 IPython从0.13.2升级到目前最新的4.0.0。

答案 8 :(得分:0)

类似traceback我成功安装python 3.5.4后遇到了pip 10.0.1ipython

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

  

要求已经是最新的:/usr/lib/python3.5/site-packages(0.8.1)中的simplegeneric

经过一些初步试验后,我在google / stackoverflow上搜索,看看是否还有其他人遇到类似问题并发现了这一点。它的@zjk答案可以帮助我找到解决方案。

<强>解决方案: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所需的原因。