我已经对此进行了很长时间的搜索,但似乎找不到关于如何执行以下操作的权威指南:
framework.subscribers
Subscriber
基类也位于framework.subscribers
guide on packaging列出了不同的方法,没有很好的示例(从框架和插件的角度来看),并且没有说明哪种方法适合哪种情况。
直觉上,我希望安装的插件也可以从framework.subscribers
导入。这是思考的好方法吗?我目前在framework.subscriber.__init__.py
import importlib
import pkg_resources
from .subscriber import Subscriber
__all__ = ['Subscriber']
subscribers = {
entry_point.name: entry_point.load()
for entry_point in pkg_resources.iter_entry_points('framework.subscriber')
}
__all__.extend(list(subscribers.keys()))
for name, clazz in subscribers.items():
locals()[clazz.__name__] = getattr(importlib.import_module(clazz.__module__), clazz.__name__)
在框架的setup.py
中,我正在向我的所有订户类注册
entry_points={
'framework.subscriber': [
'FooSubscriber = framework.subscriber.foo:FooSubscriber',
]
}
,并且可以从应提供插件的其他项目中执行相同的操作。
然后,即使它们实际上未在文件framework.subscriber.BlaSubscriber
或其他文件中定义,我也可以将它们全部作为framework.subscriber.bla.py
进行访问。
这种方法有问题吗,应该如何正确实现插件支持?