如何处理专有Python包名与公共包名冲突的问题?

2024-05-23 16:34:18 发布

您现在位置:Python中文网/ 问答频道 /正文

背景

我工作的小组一直在使用和开发一个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包的名称改为my_foobuilder,但仍要安装相同的(冲突的)Python包。然后我可以用foobuildermy_foobuilder包设置为Conflict。它可能需要用户摆弄他们的包管理器,以使事情回到正轨,但我认为这不是什么大不了的。不过,这会阻止用户同时使用公共foobuilder包。在

问题

有没有比我上面考虑过的更容易或更好的方法来处理这种情况?我正在考虑的解决方案有什么问题吗?你会怎么处理?在


Tags: 用户名称管理器mylinux系统情况小组
3条回答

我认为只要控制住了,在这里使用一个kludge就可以了。如果我在您的情况下,我会创建一个带有其他标识符的文件,比如so.py,并将内容

import relative_pathname/foobuilder as my_foobuilder

那么包可以被引用为我的美食家毫不含糊地不要求任何一个团队更改他们的产品名称。这不是一个很好的解决方案,因为所有的内部结构都需要改变,但是它应该能够在不需要更多修复的情况下解决冲突。在

我会给foobuilder软件包的新作者发邮件来讨论这个问题。很明显,你们中的一个需要改变包名,因为你的程序是专有的,所以改变它的名字是不可取的。。。向新软件包作者提出这个问题可能会想出一些新的解决方案。在

确实没有一种明智的方法让Python处理这个问题,所以“import foobuilder”可能意味着两件事。在

符号链接?在

$ echo "print 'foo'" > foo.py
$ ln -s foo.py bar.py
$ python -c "import foo; import bar"
foo
foo

非常简单,尽管有点老土:)

相关问题 更多 >