簡體   English   中英

一般來說IPython導入失敗和python sys.path

[英]IPython import failure and python sys.path in general

我正在按照這篇文章制作一個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

要解決這個問題,我將其添加到我的/ 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添加到/usr/bin/ipython sys.path 我得到的是

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導入路徑,我應該閱讀什么?

謝謝!

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現在似乎工作了!

因為ipython找不到simplegeneric。 我試圖找到simplegeneric,發現simplegeneric在'/usr/lib/pymodules/python2.7'中。 在添加'/usr/lib/pymodules/python2.7'之后,ipython工作正常。

Jeff Tratner的評論真有幫助!

如果你使用apt-get安裝ipython3 ,你就不會遇到任何問題。

而不是ipython ,你應該在終端上鍵入ipython3

對於Python 2,使用ipython2

改變路徑並沒有任何幫助。 然而,作為一個超級用戶運行ipython工作(雖然我並不為此感到自豪!)

sudo ipython

pip install ipython而不是apt-get install ipython 前者安裝在virtualenv中,后者安裝到你的系統python包中。

我有同樣的問題,在我的情況下,原因是目錄:/usr/lib/python2.7/dist-packages沒有添加到創建虛擬環境時的路徑(我想知道原因)

在我的情況下,終端中的以下解決了問題:

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

注意:這假設您使用的是virtualenvwrapper

在我的例子中,它是一個更高的包,在我的自定義Python路徑名為“path”,導致ImportError來自:

import IPython.external.path as path

請參閱https://github.com/ipython/ipython/issues/3994

我在一個新的ubuntu主機中經歷了一些奇怪的事情,並意識到我在mac上與mbuvirtualenv的行為有所不同,而不是ubuntu。 我已經克服了這個差異

'mkvirtualenv --system-site-packages mynewenv'

對我來說,解決方案是 IPython從0.13.2 升級到目前最新的4.0.0。

類似的traceback我在成功安裝ipython后遇到了python 3.5.4pip 10.0.1

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'

更新或安裝simplegenericsudo pip install simplegeneric --upgrade我得到

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

經過一些初步試驗后,我在google / stackoverflow上搜索,看看是否有其他人遇到過類似的問題並發現了這一點。 它的@zjk答案可以幫助我找到解決方案。

解決方案:python3.5安裝包dir中找到只有egg文件夾。 所以我刪除了它們並重新安裝了simplegeneric

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

之后ipython就像魅力一樣。

注意:我在系統級安裝包,這就是sudo所需的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM