1

我是 virtualenv 的新手,但我遇到的错误对我来说没有任何意义。

当我pip install MultiString在我的 Python 2.7 virtualenv 中执行此操作时,我可以毫无问题地使用该包。

如果我在 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)tom@K9:~$ 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进入该目录并python __init__.py从 p3 virtualenv 中执行,则没有问题。同样,如果我cd进入该目录并打开一个交互式会话,我就可以像往常一样导入和使用该库。

给出的错误消息表明它正在找到正确的包,但我不明白为什么它无法导入它。

我尝试添加/home/tom/p3/lib/python3.2/site-packagesPATH环境变量以防万一,但它并没有解决问题。

我正在尝试使用 tox 来测试我的库与 Python 3 的兼容性,并且我没有过多地使用 Python 3,但我觉得这更多是 virtualenv 的问题。

4

1 回答 1

2

猜测一下,这是旧的(2.x)相对导入的问题。__init__.py可能有

from MultiString import MultiString

虽然它应该是

from multistring.MultiString import MultiString

或(我认为)

from .MultiString import MultiString

但我相信绝对进口是首选。

这是我在 3.x 下安装 2.x 软件包时多次偶然发现的问题。我不知道 2to3 工具是否解决了这个问题(我已经手动破解了源代码)。

于 2013-03-23T12:33:52.093 回答