【发布时间】:2013-03-22 15:58:11
【问题描述】:
我是 virtualenv 的新手,但我遇到的错误对我来说没有任何意义。
当我在 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)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 进入该目录并在 p3 virtualenv 中执行 python __init__.py,则没有问题。同样,如果我 cd 进入该目录并打开一个交互式会话,我就可以像往常一样导入和使用该库。
给出的错误消息表明它正在找到正确的包,但我不明白为什么它无法导入它。
我尝试将/home/tom/p3/lib/python3.2/site-packages 添加到PATH 环境变量中,以防万一,但这并没有解决问题。
我正在尝试使用 tox 来测试我的库与 Python 3 的兼容性,而我使用 Python 3 的次数不多,但我觉得这更多是 virtualenv 的问题。
【问题讨论】:
-
猜测,这是旧 (2.x) 相对导入的问题。
__init__.py可能有from MultiString import MultiString,而它应该有from multistring.MultiString import MultiString,或者(我认为)from .MultiString import MultiString。这是我在 3.x 下安装 2.x 包时多次偶然发现的问题。
标签: python virtualenv python-3.2