这可能是我自己对Python导入和搜索路径如何工作的误解,或者在caldav包的打包中可能存在问题。
我已经建立了一个名为myproject
的virtualenv环境在myproject的顶层,我有一个脚本test.py,其中包含两个导入:
import lxml
import caldav
在此目录中,我输入:
python test.py
并且没有任何问题,它可以正常工作
现在我将脚本移动到子目录测试并运行命令:
python test/test.py
导入lxml似乎仍然有用。导入的caldav失败,出现以下异常:
Traceback (most recent call last):
File "test/test.py", line 34, in <module>
main()
File "test/test.py", line 29, in main
exec ( "import " + modulename )
File "<string>", line 1, in <module>
File "/home/ec2-user/caldav2sql/myproject/test/caldav/__init__.py", line 3, in <module>
from davclient import DAVClient
File "/home/ec2-user/caldav2sql/myproject/test/caldav/davclient.py", line 8, in <module>
from caldav.lib import error
ImportError: No module named lib
我在这里做错了吗?我应该建立某种道路吗?
答案 0 :(得分:3)
最有可能的是,caldav
与test.py
位于同一目录中,因此当您import
时,它工作正常。现在您已将test.py
移至子目录,导入无法找到它。您可以移动caldav
或设置PYTHONPATH
。
您还可以修改sys.path
来自Python模块教程的信息:http://docs.python.org/tutorial/modules.html
变量sys.path是一个字符串列表,用于确定解释器的模块搜索路径。它被初始化为从环境变量PYTHONPATH获取的默认路径,或者如果未设置PYTHONPATH,则从内置默认路径初始化。您可以使用标准列表操作对其进行修改:
>>> import sys
>>> sys.path.append('/ufs/guido/lib/python')