我有一个像这样的文件夹结构:
package_name/
|-- module1
|-- module2
|-- module3
我需要做的是import package_name
,然后迭代每个模块,一个接一个地运行代码。导入是在命令行中给出的,所以我无法提前控制。因此,用户可能会说run_script.py --modules='package_name.module1'
或用户可能只是说run_script.py --modules='package_name
。
我可以执行from package_name import *
,这将导入__all__
中我__init__.py
变量中定义的所有内容,但是从那里我有点难过。
对于我的下一步,我需要一种方法:
for module in imported:
module.run()
答案 0 :(得分:1)
我通常使用这样的函数来按路径导入模块:
def import_by_path(path):
if '.' not in path:
return __import__(path, globals(), locals())
path, module = path.rsplit('.', 1)
mod = __import__(path, globals(), locals(), [module])
try:
return getattr(mod, module)
except AttributeError:
raise ImportError, "Could not import %s" % path
像这样使用:
mod = import_by_name("itertools")
或者在你的情况下:
for mod in map(import_by_name, imported):
mod.run()