繁体   English   中英

如果脚本移至子目录,Python脚本导入将失败

[英]Python script import fails if script is moved to subdirectory

这可能是我对Python导入和搜索路径的工作方式的误解,或者可能是caldav软件包的包装中存在问题。

我已经建立了一个名为myproject的virtualenv环境

在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

我在这里做错什么了吗? 我应该设置某种路径吗?

最有可能的是, caldavtest.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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM