以下是设置:
program [root]
├─ main.py
├─ utils
| |
| └─ util1.py
└─ plugins
|
└─ plugin1.py
现在我想用pkgutil.iter_modules()
动态加载所有插件,效果很好。在我将from ..utils import util1
放入plugin1之前。然后我得到
ValueError: attempted relative import beyond top-level package
我尝试了两件事。首先,我像这样使用importer.find_module().load_module()
:
for importer, module_name, ispkg in pkgutil.iter_modules(plugins.__path__):
importer.find_module(module_name).load_module(module_name)
并且由于__package__
在plugin1中为空,我也尝试了importlib.import_module()
:
module = importlib.import_module(package + "." + module_name, package=package)
以package
开头"plugins"
并将plugins
的每个子文件夹添加到字符串中,并使用.
我是如何做到这一点的?