开发者

Python script import fails if script is moved to subdirectory

This may be my own misunderstanding of how Python imports and search paths work, or it may be a problem in the packaging of the caldav package.

I have set up a virtualenv environment named myproject

In the top level of myproject, I have a script test.py which contains two imports:

import lxml
import caldav

In this directory, I type:

python test.py

and it works fine without any problem

Now I move the script to the subdirectory test and run the command:

python test/test.py

The import lxml seems to still work. The import caldav fails with the following exception:

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 i开发者_运维百科mport error
ImportError: No module named lib

Am I doing something wrong here? Should I be setting up some kind of path?


Most likely, caldav was in the same directory as test.py, so when you import it it worked fine. Now that you moved test.py to a subdirectory, your imports can't find it. You can either move caldav or set your PYTHONPATH.

You could also modify your sys.path

Information from Python's module tutorial: http://docs.python.org/tutorial/modules.html

The variable sys.path is a list of strings that determines the interpreter’s search path for modules. It is initialized to a default path taken from the environment variable PYTHONPATH, or from a built-in default if PYTHONPATH is not set. You can modify it using standard list operations:

>>> import sys
>>> sys.path.append('/ufs/guido/lib/python')
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜