2012-07-20 47 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軟件包中。