Python脚本移动到子目录后导入失败
这可能是我对Python导入和搜索路径的理解有误,或者可能是caldav这个包的打包出现了问题。
我已经设置了一个名为myproject的虚拟环境。
在myproject的顶层,我有一个名为test.py的脚本,里面有两个导入:
import lxml
import caldav
在这个目录下,我输入:
python test.py
结果一切正常,没有任何问题。
现在我把这个脚本移动到一个名为test的子目录,然后运行命令:
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
我是不是做错了什么?我是不是应该设置某种路径?
1 个回答
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')