考虑我有一个名为root
的目录,它有两个目录:x
和y
。我有一个位于x
的模块文件,让我们称之为test.py
。现在在y
,我有一个需要调用test.py
我做的很简单:
from x import test
它有效。我在想,这是怎么回事?
编辑:它是如何工作的,就像__init__.py
中没有x
文件一样,但是从y
我可以从那里调用模块。
答案 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
(我知道):
我猜测它适用于你的原因是你在root
中有一个脚本(假设main.py
),该脚本最终从x
和{{}导入1}}。由于您在根目录中运行脚本,因此它被添加到python路径中,这允许y
工作。
修改
没有from x import test
呃?你确定那里没有__init__.py
(注意pyc中的C)?