【发布时间】:2011-07-07 22:28:10
【问题描述】:
背景
与我一起工作的小组一直在使用和开发一个 Python 包,出于本问题的目的,我将其称为 foobuilder。我们使用为用户提供的私有 RPM 和 Deb 存储库为 Linux 系统提供更新。
最近,PyPi 中添加了一个同名的公共包。它还被打包在公共 Debian 存储库以及其他地方。由于我们不公开宣传我们的包裹,因此弹出同名包裹是可以理解的。
担忧
这对于foobuilder 来说似乎是个大问题,因为在某个地方,用户可能会尝试安装我们的foobuilder,而公共foobuilder 软件包安装在同一系统上。
除了 Python 中的明显问题之外,我猜想将我们的存储库添加到 Debian 包管理器程序也可能会导致一些问题,尽管我还没有尝试过这种情况。
问题
由于我们多年来一直使用专有的foobuilder,因此存在大量代码想要import foobuilder 并希望得到我们的包,所以我认为更改名称是不可行的.
我对可能解决方案的想法
Python
我考虑将包的名称更改为my_foobuilder,并让它包含一个名为foobuilder 的元包,它只包含一个__init__.py,它从my_foobuilder 导入所有内容。我可以指导新用户直接导入my_foobuilder。然后我可以开始弃用foobuilder 名称。最后,这将导致与我现在将 foobuilder 更改为 my_foobuilder 相同的工作量,因为每个人都需要获得更新,并且 foobuilder 名称不能永远处于弃用炼狱中。
Debian
Debian 的问题应该不难解决;我可以将 debian 包名称更改为my_foobuilder,但它仍然安装相同的(冲突的)Python 包。然后我可以使用foobuilder 将my_foobuilder 包设置为Conflict。在过渡期间,它可能需要用户摆弄他们的包管理器才能让事情回到正轨,但我认为这没什么大不了的。尽管如此,这仍会阻止用户同时使用公共 foobuilder 包。
问题
有没有比我上面考虑的更容易或更好的方法来处理这种情况?我正在考虑的解决方案有什么问题吗?你会怎么处理呢?
【问题讨论】:
-
不是技术解决方案,但您是否考虑过与同名公共包的作者联系,并礼貌地询问他们是否可以使用其他名称。当然,他们有权拒绝,但他们可能会像您一样热衷于避免冲突,而且如果是新软件包,更改会更容易。
-
我认为您建议的方法正是我会做的。我还将添加一个元包,允许以其他名称导入冲突包(并确保优先导入您的包而不是公共包)
标签: python debian packages naming