我想做一个可插拔的程序。我想用setuptools的方法,用鸡蛋。在
我已经能够制作一个插件来为一些功能提供一个替代类,我可以使用它。在
我想选择在运行时使用的类;要么是核心模块中的类,要么是任何插件中的类。我想使用pkg_resources方法查询这些类:
for entrypoint in pkg_resources.iter_entry_points("myapp.myclasses"):
我如何在core中为我的类创建一个EntryPoint对象,并注册它,这样iter_entry_points将以与我的.egg插件类相同的方式返回它?在
Tags:
pkg_resources.iter_entry_points
列出任何egg中给定名称的任何入口点,包括您自己的包。因此,如果您在setup.py
中的entry_points
条目列出了以下、和您运行了setup.py develop
来生成元数据,那么您自己的入口点将包括在内:Babel project正是这样做的;在它的^{} 中,它列出了}的入口点,它们分别由^{} 和{a4}查找。在
babel.checkers
和{如果您不想拥有
setup.py
文件(这很容易创建和/或从模板生成),那么您将不得不改变pkg_resources.working_set
的内部状态:working_set.entries
是一个鸡蛋列表。您必须将项目的顶级目录的路径添加到此。在working_set.entry_keys
是从{working_set.by_key
是从包名到pkg_resources.Distribution
实例的映射。您需要创建一个Distribution
实例,并将其存储在您的包名下:working_set.by_key['package.name'] = yourdistribution
。在出于您的目的,
^{pr2}$Distribution
实例可以是相当稀疏的,但我至少要包括项目名称。但您需要有一个入口点地图:内部结构
_ep_map
通常根据需要从egg-info元数据进行解析。在请注意,这完全依赖于无文档的内部数据结构,这些数据结构可以在不同版本之间更改。换句话说,你在这里是自己一个人。我将生成一个
setup.py
文件,然后运行python setup.py develop
来生成egg元数据。在相关问题 更多 >
编程相关推荐