【发布时间】:2014-04-26 09:43:02
【问题描述】:
我想在一个目录树中导入所有 python 文件,即如果我们有以下目录结构:
tests/
tests/foo.py
tests/subtests/bar.py
(想象树的深度是任意的)。
我想做import_all('tests') 并加载foo.py 和bar.py。使用通常的模块名称(tests.foo 和 tests.subtests.bar)导入会很好,但不是必需的。
我的实际用例是我有一大堆包含 django 表单的代码;我想确定哪些表单使用特定的字段类。我对上述代码的计划是加载我的所有代码,然后检查所有加载的类以找到表单类。
在 python 2.7 中有什么好的、简单的方法来解决这个问题?
【问题讨论】:
-
任何理由不使用 os.walk() tutorialspoint.com/python/os_walk.htm
-
@GaryWalker 不是特别是,但 os.walk 本身并不是一个完整的解决方案。
-
__import__或更好的importlib用于 Python 3.1+ -
我想我只是假设你会动态加载模块。有关示例,请参阅stackoverflow.com/questions/769534/…。不确定这一定是个好主意——取决于你想要完成什么
-
@poke 试试
__import__('tests/subtests/bar.py')并回复我。
标签: python django reflection introspection