导入驻留在不相关路径中的文件

时间:2010-07-02 18:53:40

标签: python

考虑我有一个名为root的目录,它有两个目录:xy。我有一个位于x的模块文件,让我们称之为test.py。现在在y,我有一个需要调用test.py

的模块

我做的很简单:

from x import test

它有效。我在想,这是怎么回事?

编辑:它是如何工作的,就像__init__.py中没有x文件一样,但是从y我可以从那里调用模块。

2 个答案:

答案 0 :(得分:1)

没有。您或您的操作系统或Python站点启动脚本已修改PYTHONPATH

14:59 jsmith@upsidedown pwd
/Users/jsmith/Test/Test2/root

14:59 jsmith@upsidedown cat x/test.py
def hello():
  print "hello"

14:59 jsmith@upsidedown cat y/real.py
#!/usr/bin/python
from x import test
test.hello()

14:59 jsmith@upsidedown y/real.py
Traceback (most recent call last):
  File "y/real.py", line 3, in <module>
    from x import test
ImportError: No module named x

答案 1 :(得分:0)

因为它有一条路径。试试这个:

import sys
print sys.path

这应该输出python用作解决模块位置的起始方向的所有位置。例如,如果root实际上在/ home / PulpFiction / root(或C:\ Documents and Settings \ PulpFiction \ My Documents \ root on windows)中,您会看到如下内容:

['', '/usr/local/lib/python2.6/dist-packages', *more stuff*, '/home/PulpFiction/root']

或在Windows上:

['', 'C:\\python26\\site-packages', *more stuff here*, 'C:\Documents and Settings\PulpFiction\My Documents\root']

有几种方法可以设置sys.path(我知道):

  1. 您从
  2. 运行脚本的目录
  3. 环境变量(准确地说是PYTHONPATH)
  4. Windows注册表(显然只在Windows上)
  5. 在代码
  6. 中自己手动附加sys.path变量的路径

    我猜测它适用于你的原因是你在root中有一个脚本(假设main.py),该脚本最终从x和{{}导入1}}。由于您在根目录中运行脚本,因此它被添加到python路径中,这允许y工作。

    修改

    没有from x import test呃?你确定那里没有__init__.py(注意pyc中的C)?