Python 导入驻留在不相关路径中的文件
假设我有一个名为Python 导入驻留在不相关路径中的文件,python,Python,假设我有一个名为root的目录,它有两个目录:x和y。我有一个驻留在x中的模块文件,我们称之为test.py。现在在y中,我有一个模块需要调用test.py 我正在做一个简单的: 来自x导入测试 它是有效的。我在想,这是怎么回事 编辑:它是如何工作的,因为在x中没有\uuu init\uuuuuuuy.py文件,但是从y我可以从那里调用一个模块。因为有一个到它的路径。试试这个: import sys print sys.path 它应该输出python用作解析模块位置的起始目录的所有位置。因此
root
的目录,它有两个目录:x
和y
。我有一个驻留在x
中的模块文件,我们称之为test.py
。现在在y
中,我有一个模块需要调用test.py
我正在做一个简单的:
来自x导入测试
它是有效的。我在想,这是怎么回事
编辑:它是如何工作的,因为在
x
中没有\uuu init\uuuuuuuy.py
文件,但是从y
我可以从那里调用一个模块。因为有一个到它的路径。试试这个:
import sys
print sys.path
它应该输出python用作解析模块位置的起始目录的所有位置。因此,例如,如果root
实际上位于/home/pallfruption/root(或windows上的C:\Documents and Settings\pallfruption\My Documents\root),您将看到如下内容:
['', '/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']
有几种方法可以设置系统路径(据我所知):
root
(比如main.py
)中有一个脚本,并且该脚本最终从x
和y
导入。由于您在根目录中运行脚本,因此它被添加到python路径中,从而允许from x import test
工作
编辑
没有
\uuuu init\uuuu.py
嗯?你确定那里没有\uuuu init\uuuu.pyc
(注意pyc中的C)?它没有。您或您的操作系统或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
14:59jsmith@upsidedown pwd
/Users/jsmith/Test/Test2/root
14:59 jsmith@upsidedown cat x/test.py
def hello():
打印“你好”
14:59 jsmith@upsidedown 猫y/real.py
#!/usr/bin/python
从x导入测试
test.hello()
14:59 jsmith@upsidedown y/real.py
回溯(最近一次呼叫最后一次):
文件“y/real.py”,第3行,在
从x导入测试
ImportError:没有名为x的模块
我明白了。与我上面提到的情况类似,导入模块的最佳方式是什么?稍后我将检查我的代码,但首先我应该知道这样做的方法:)import sys
,然后sys.path.append(“/full/path/to/root”)
,并确保root/x
中有一个\uu init\uuuuuuuuuuuuuuuuuuuuuuuuy
。谢谢,我会尝试一下。谢谢你的解释和时间!编辑:我发现了这一点,因为我的原始脚本是从x
开始的,这就是为什么这样做的原因。