2013-03-22 30 views
1

我是virtualenv的新手,但是我得到的錯誤對我沒有任何意義。VirtualEnv - Python 3.2 - 軟件包給出ImportError(但不在2.7)

當我在我的Python 2.7 virtualenv中做pip install MultiString時,我可以使用包沒有問題。

如果我做同樣的在Python 3.2的預期安裝運行,但嘗試導入的時候,我得到:

File "<stdin>", line 1, in <module> 
    File "/home/tom/p3/lib/python3.2/site-packages/multistring/__init__.py", line 1, in <module> 
    from MultiString import MultiString 
ImportError: No module named MultiString 

即使:

(p3)[email protected]:~$ ls -alh /home/tom/p3/lib/python3.2/site-packages/multistring/ 
total 28K 
drwxrwxr-x 3 tom tom 4.0K Mar 22 11:44 . 
drwxrwxr-x 7 tom tom 4.0K Mar 22 11:43 .. 
-rw-rw-r-- 1 tom tom 36 Mar 22 11:43 __init__.py 
-rw-rw-r-- 1 tom tom 12K Mar 22 11:43 MultiString.py 
drwxrwxr-x 2 tom tom 4.0K Mar 22 11:43 __pycache__ 

如果我cd成目錄,並且從p3 virtualenv中執行python __init__.py,則沒有問題。同樣,如果我將cd放入該目錄並打開一個交互式會話,我可以照常導入和使用該庫。

給出的錯誤消息表明它找到了正確的包,但我不明白爲什麼它無法導入它。

我試着將/home/tom/p3/lib/python3.2/site-packages添加到PATH環境變量,以防萬一,但它沒有解決問題。

我正在嘗試使用tox來測試我的庫與Python 3的兼容性,並且我還沒有使用過Python 3,但是我感覺這更像是一個virtualenv問題。

+2

有人猜測,這是舊的(2.x)相對導入的問題。 '__init __。py'可能具有'從MultiString import MultiString',而它應該有'from multistring.MultiString import MultiString',或(我認爲)'from .MultiString import MultiString'。這是我在3.x下安裝2.x軟件包時偶然發現的一個問題。 – Evert 2013-03-22 17:11:05

回答

2

有人猜測,這是舊的(2.x)相對導入問題。 __init__.py可能有

from MultiString import MultiString 

,而應該是

from multistring.MultiString import MultiString 

或(我認爲)

from .MultiString import MultiString 

但我相信絕對進口是首選。

這是我在3.x下安裝2.x軟件包時偶然發現的一個問題。我不知道2to3工具是否修復了這個問題(我手動破解了源代碼)。

相關問題