动态导入包含相对导入的模块

y-s*_*een 5 python python-import python-3.x

这是设置:

\n\n
 program [root]\n  \xe2\x94\x9c\xe2\x94\x80 main.py\n  \xe2\x94\x9c\xe2\x94\x80 utils\n  |   |\n  |   \xe2\x94\x94\xe2\x94\x80 util1.py\n  \xe2\x94\x94\xe2\x94\x80 plugins\n      |\n      \xe2\x94\x94\xe2\x94\x80 plugin1.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想动态加载所有插件,使用pkgutil.iter_modules(),效果很好。直到我放入from ..utils import util1plugin1。然后我得到

\n\n
ValueError: attempted relative import beyond top-level package\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试了两件事。首先,我用了importer.find_module().load_module()这样使用:

\n\n
for importer, module_name, ispkg in pkgutil.iter_modules(plugins.__path__):\n    importer.find_module(module_name).load_module(module_name)\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于__package__plugin1中为空,我也尝试过importlib.import_module()这样:

\n\n
module = importlib.import_module(package + "." + module_name, package=package)\n
Run Code Online (Sandbox Code Playgroud)\n\n

packageas 开头"plugins"并将每个子文件夹添加plugins到字符串中,并用 a 分隔.

\n\n

我有什么想法可以让这项工作成功吗?

\n