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

时间:2011-07-07 22:28:10

标签: python debian packages naming

背景

我使用的小组一直在使用和开发一个Python包,出于这个问题的目的,我将调用foobuilder。我们使用我们为用户提供的私有RPM和Deb存储库为Linux系统提供更新。

最近,一个公共包被添加到PyPi,名称相同。它还被打包在公共Debian存储库以及其他地方。由于我们没有公开宣传我们的软件包,因此可以理解已经弹出了具有相同名称的软件包。

关注

对于foobuilder来说,这似乎是个大问题,因为在某个地方,用户可能会尝试安装我们的foobuilder,而公共foobuilder软件包安装在同一系统上。< / p>

除了Python中的明显问题,我猜想将我们的存储库添加到Debian软件包管理器程序也可能会导致一些问题,尽管我还没有解决过这种情况。

问题

由于我们多年来一直使用专有的foobuilder,因此存在大量代码需要import foobuilder并期望得到我们的包,所以我认为这不可行更改名称。

我对可能解决方案的看法

的Python

我考虑过将程序包的名称更改为my_foobuilder,并让它包含一个名为foobuilder的元数据包,它只包含从{__init__.py导入所有内容的my_foobuilder 1}}。我可以指示新用户直接导入my_foobuilder。然后我可以开始弃用foobuilder名称。最后,这将导致相同的工作量,就像我现在将foobuilder更改为my_foobuilder一样,因为每个人都需要提供更新,并且foobuilder名称不能弃用永远炼狱。

的Debian

Debian问题不应该太难解决;我可以将debian软件包名称更改为my_foobuilder但是仍然安装相同(冲突的)Python软件包。然后,我可以使用my_foobuilderConflict包设置为foobuilder。它可能要求用户在他们的包管理器中摆弄,以便在转换期间让事情重回正轨,但我认为这不是什么大问题。但是,这会阻止用户同时使用公共foobuilder包。

问题

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

3 个答案:

答案 0 :(得分:3)

发送电子邮件新的foobuilder软件包作者来讨论这个问题。显然你们中的一个人需要更改包名;由于您的程序的专有性质可能不希望更改其名称...向新包装作者提出这个问题可能会提出一些新的解决方案。

让Python处理这种方式确实没有理智,所以'import foobuilder'可能意味着两件事。

答案 1 :(得分:1)

我认为只要控制了污泥,使用污泥就可以了。如果我在你的情况下,我会创建一个包含其他标识符的文件,例如so.py,内容为

import relative_pathname/foobuilder as my_foobuilder

然后,包可以明确地引用为so.my_foobuilder,而无需任何一个团队更改其产品名称。这不是一个很好的解决方案,因为所有的内部都需要转移,但它应该解决冲突而不需要更多的修复。

答案 2 :(得分:1)

符号链接?

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

非常简单,虽然有些hackish:)