存储和检索有关Python发行版的元数据

存储和检索有关Python发行版的元数据,python,setuptools,Python,Setuptools,我正在构建一个接受插件的系统,使用setuptools的入口点功能查找插件。因此,插件由发行版提供,但单个发行版可能提供多个插件 我想用某种方法对提供一个或多个插件的每个发行版的元数据进行编码。简单的东西,比如bug文件URL,但比内置的设置参数允许的要多一些。另外,插件使用名称空间包,因此每个发行版没有唯一的顶级包 我已经试过了,但这暴露了setuptools的错误,而且无论如何都有一些鸡和蛋的问题。我也尝试过通过pkg\u resources.resource\u stream阅读它,但意识

我正在构建一个接受插件的系统,使用setuptools的入口点功能查找插件。因此,插件由发行版提供,但单个发行版可能提供多个插件

我想用某种方法对提供一个或多个插件的每个发行版的元数据进行编码。简单的东西,比如bug文件URL,但比内置的
设置
参数允许的要多一些。另外,插件使用名称空间包,因此每个发行版没有唯一的顶级包

我已经试过了,但这暴露了setuptools的错误,而且无论如何都有一些鸡和蛋的问题。我也尝试过通过
pkg\u resources.resource\u stream
阅读它,但意识到安装包后
setup.cfg
就会消失,这太晚了


我可能会想出一些更深奥或非功能性的想法,但我希望有某种最佳实践(甚至是“最不糟糕的实践”)可以遵循。

设置工具最稳定、最可靠的部分似乎是入口点


我采用的解决方案包括使用一个额外的入口点组来定位字典,插件开发者可以将字典埋在他们喜欢的任何Python路径上(包括名称空间包中的包内)。然后,系统只需查找这些入口点并获取字典。

您希望此元数据可以从Python代码中访问,还是只想与已安装的包一起放在文件中?可以从Python代码中访问,但我不介意打开并读取一个文件来实现这一点。只要文件名是可移植的——那么硬编码的
/tmp/relingapi metadata.ini
就不存在了!您可以将
pkg\u resources.resource\u stream
(或
resource\u filename()
等)用于作为发行版一部分的任何文件,因此不仅仅是
setup.cfg
。是的,例如,我可以指示插件开发人员在安装前缀中写入
DISTNAME metadata.ini
文件。但是有更好的方法吗?另一个选择是添加一个额外的入口点,只命名一个数据结构。这可能比安装在magic目录中的magic文件名更干净、更容易发现(并且更容易使用MANIFEST.in和所有jazz进行设置)。