我正在尝试在这里做两件事,动态导入目录中的所有模块(金额/名称未知),然后为每个模块发现调用一个名为checkMe()的函数。 checkMe()保证在每个模块中,因此无需检查。这就是我到目前为止所做的:
导入
import sys
import os
import glob
pathname = os.path.dirname(sys.argv[0]) + "/"
pathname = pathname + "/modules/"
__modules__ = [ os.path.basename(f)[:-3] for f in glob.glob(os.path.dirname(pathname)+"/*.py")]
for module in __modules__:
__import__(module)
调用checkMe()
for module in __modules__:
m = getattr(sys.modules[__name__], module)
getattr(m, 'checkMe').__call__()
但是我收到了这个错误:
AttributeError: 'module' object has no attribute 'sendme'
(sendme是第一个模块)
非常感谢任何帮助......谢谢!
答案 0 :(得分:0)
__import__
有一些关于包(包含__init__.py
)和模块的目录的棘手语义。您需要使用fromlist
参数才能使其正常工作。实际上,使用runpy
最简单地按路径运行模块(来自注释:run_path需要Python 2.7或更新版本):
import runpy
runpy.run_path('path/to/file.py')