如何在另一个Python文件中运行不在目录中的Python文件?

时间:2012-12-30 20:10:20

标签: python python-3.x exec

假设我有一个文件foo.py,并且在文件中我想执行一个文件bar.py.但是,bar.py与foo.py不在同一目录中,它位于子目录调用baz中。 execfile会工作吗?那么os.system呢?

3 个答案:

答案 0 :(得分:5)

只需添加一个空的__init__.py文件即可发信号baz是一个模块,并从foo.py执行:

from baz import bar

当然,除非您有充分的理由不将baz放入模块(并使用execfile)。

答案 1 :(得分:2)

import sys, 通过在运行时附加路径来更改“sys.path”,然后导入将帮助的模块

答案 2 :(得分:1)

问题意味着您希望将这些作为脚本运行,所以是的:您可以在2.X或subprocess中使用execfile(调用解释器并将脚本作为参数传递)。您只需要提供文件的绝对路径。

# Python 2.X only!
execfile ('c:/python/scripts/foo/baz/baz.py')

当然,这样做实际上是脆弱的。如果baz总是foo的子目录,你可以从foo的文件中得到它:

baz_dir = os.path.join(os.path.dirname(__file__), "baz")
baz_file = os.path.join(baz_dir, "baz.py")
execfile(baz_file)

如果两个文件都位于python可以看到的位置 - 即文件夹位于sys.path或已使用site添加到搜索路径中,则可以从foo导入baz,直接称它为函数。如果您需要实际处理来自baz的信息,而不仅仅是触发一个动作,这是一个更好的方法。 As long as there is an init.py in each folder你可以做到

import baz
baz.do_a_function_defined_in_baz()