2012-07-20 59 views
13

我正在关注这个post使一个ipython规则所有的virtualenvs。IPython导入失败和一般的python sys.path

从我的理解,这篇文章的主要思想是,当在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/bin/ipython/usr/lib/python2.7/dist-packages/IPython/externalsys.path为好。我得到的是对IPython/__init__py线43发生

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 

这个错误,但在第46行

  1. 前一个发生怎样才能让IPython中使用的virtualenv工作?

  2. 如何将/usr/lib/python2.7/dist-packages/IPython/external添加到sys.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'] 
+2

你可以发布你看到如果你运行'import sys;在你的* normal * python中打印sys.path'? (即你安装IPython的那个) – 2012-07-20 07:43:51

+0

现在在添加'/usr/lib/pymodules/python2.7'之后,ipython似乎很有用。 – zjk 2012-07-20 08:07:29

+0

好吧,你似乎已经解决了你的问题(基本上,通过检查你的路径,然后搞清楚你实际需要添加什么)。你应该把它作为这个问题的答案。 – 2012-07-20 08:09:21

回答

9

IPython的似乎是现在的工作!

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

Jeff Tratner的评论确实有帮助!

+0

我发现下面的命令工作:PYTHONPATH =/usr/lib/python2.7/dist-packages ipython(这是在Ubuntu 12.04中,使用Python 2.7在virtualenv中) – 2015-06-24 09:53:05

7

如果您使用apt-get安装ipython3,那么您不会遇到任何类似的问题。

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

对于Python 2使用ipython2

+3

+1 !!!在我的例子中,我输入“ipython2.7”使其在virtualenv中工作。 – jrvidotti 2013-12-17 13:20:34

+0

+1:** ipython2.7 qtconsole **现在工作...只有** ipython **工作!感谢修复一路jrvidotti(这是一个奋斗) – wgw 2014-02-05 03:57:02

3

对路径所做的更改没有任何帮助。然而,作为超级用户运行ipython的工作(虽然我并不感到骄傲!)

sudo ipython 
+1

好吧,它解决了这个问题。但谁能正式解释为什么? O_O – 2014-02-11 11:05:42

1

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

在我的情况下,在终端下面的解决了这个问题:

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

注:这里假设你正在使用virtualenvwrapper

0

我经历了一个新的ubuntu主机的一些怪事,并意识到我正在为不同的行为mkvirtualenv在Mac上与Ubuntu的。我过去的这种差异与

'mkvirtualenv --system-site-packages mynewenv' 
0

对我来说,解决办法是从升级0.13.2的IPython到当前最新的4.0.0。

1

pip install ipython而不是apt-get install ipython。前者安装到virtualenv中,后者安装到您的系统python软件包中。