Python插件体系结构,其中插件是包

Python插件体系结构,其中插件是包,python,plugins,python-importlib,Python,Plugins,Python Importlib,我正在尝试创建一个可以用插件扩展的python应用程序 为了进行测试,我尝试创建一个具有以下结构的插件: plugin_name ├── __init__.py ├── utils.py └── config.py 我需要的插件类位于plugin\u name.\uuuu init\uuuu.py中,但是\uuuuuu init\uuuuu.py使用utils.py 我正在使用以下代码导入\uuuu init\uuuu.py: import os module_path = "pa

我正在尝试创建一个可以用插件扩展的python应用程序

为了进行测试,我尝试创建一个具有以下结构的插件:

plugin_name
├── __init__.py
├── utils.py
└── config.py
我需要的插件类位于
plugin\u name.\uuuu init\uuuu.py
中,但是
\uuuuuu init\uuuuu.py
使用
utils.py

我正在使用以下代码导入
\uuuu init\uuuu.py

import os

module_path = "path to __init__.py"
package_name = os.path.basename( os.path.dirname(path) )
spec = importlib.util.spec_from_file_location(package_name, path)
plugin_module = importlib.util.module_from_spec(spec)

spec.loader.exec_module(plugin_module )
如果
\uuuu init\uuuu.py
导入
utils.py

import utils.py
import utils.py
它抛出
ModuleNotFoundError:没有名为“utils”的模块

如果
\uuuu init\uuuu.py
导入
utils.py

import utils.py
import utils.py
它抛出
ImportError:尝试在没有已知父包的情况下进行相对导入

因此,很明显,我使用的导入代码无法识别包,只导入我指定的特定文件,而不导入它所在的文件夹或同一目录中的其他文件的任何元数据

有没有办法导入这样的包



我正在研究
pkgutil
,我可以看到使用
pkgutil.walk\u模块
,我可以识别插件中的所有包。我想知道我是否可以使用它来导入我想要的插件,但我找不到任何示例或文档可以说明这一点。

如果插件目录看起来是这样的:

path_to_plugin
└── plugin_name
    ├── __init__.py
    ├── utils.py
    └── config.py
此代码在目录中动态加载包


如果有更好的答案,请分享。

这通常不是如何使项目“可插拔”。除非插件是在Python进程已经运行时安装的。这是你的情况吗?是的,插件存在于一个名为插件的文件夹中,我有指向每个插件的路径。实际上,你能澄清一下你所说的安装是什么意思吗?我没有安装pip,但是它们存在于一个已知的目录中。