2013-03-22 36 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工具是否修复了这个问题(我手动破解了源代码)。

相关问题