导入并运行文件夹中的所有模块

3
有没有一种方法可以导入并运行文件夹中的所有.py文件?基本上我认为pytest是如何进行测试发现的。似乎我应该从文件路径导入列表,然后迭代遍历列表,在每个模块上调用.main(*args)。它还需要兼容Python 2和3。
例子:
  • start.py
  • things/
    • mod1.py
      • main(*args):
    • mod2.py
      • main(*args):
1个回答

4
你可以使用 importlib。假设有以下简单的目录结构:
  • a.py
  • b.py
  • c.py
a.pyb.py 包含以下简单函数:
def main(name):
    print name

在中,我们可以遍历我们的目录,并使用导入每个文件。我们必须确保使导入的模块在全局范围内可访问,否则它们将仅在for循环中为本地变量。
import importlib

files = ['a', 'b']

for f in files:
    globals()[f] = importlib.import_module(f)

a.main('adam')
b.main('ben') 

运行 c.py 后会产生以下输出:

adam
ben

如果要导入的模块在子目录中,您需要先使用chdir切换到该文件夹,然后尝试导入。但有可能会出现ImportError: No module named <filename>的错误提示。 - Cirrith
不要使用迭代文件的方式,可以使用类似于os.listdir()或os.walk()的方法。 - amitchone
要能够做到这一点,您需要将要导入的文件夹添加到sys.path中,否则它不会在那里查找,或者将当前目录'.'添加到sys.path中。非常感谢!!! - Cirrith
不客气!如果您能接受这个答案,那么将有助于未来其他人的解决问题。如果您想以这种方式完成,您也可以简单地假装目录名称是文件列表即可。 - amitchone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接