我使用的小组一直在使用和开发一个Python包,出于这个问题的目的,我将调用foobuilder
。我们使用我们为用户提供的私有RPM和Deb存储库为Linux系统提供更新。
最近,一个公共包被添加到PyPi,名称相同。它还被打包在公共Debian存储库以及其他地方。由于我们没有公开宣传我们的软件包,因此可以理解已经弹出了具有相同名称的软件包。
对于foobuilder
来说,这似乎是个大问题,因为在某个地方,用户可能会尝试安装我们的foobuilder
,而公共foobuilder
软件包安装在同一系统上。< / p>
除了Python中的明显问题,我猜想将我们的存储库添加到Debian软件包管理器程序也可能会导致一些问题,尽管我还没有解决过这种情况。
由于我们多年来一直使用专有的foobuilder
,因此存在大量代码需要import foobuilder
并期望得到我们的包,所以我认为这不可行更改名称。
我考虑过将程序包的名称更改为my_foobuilder
,并让它包含一个名为foobuilder
的元数据包,它只包含从{__init__.py
导入所有内容的my_foobuilder
1}}。我可以指示新用户直接导入my_foobuilder
。然后我可以开始弃用foobuilder
名称。最后,这将导致相同的工作量,就像我现在将foobuilder
更改为my_foobuilder
一样,因为每个人都需要提供更新,并且foobuilder
名称不能弃用永远炼狱。
Debian问题不应该太难解决;我可以将debian软件包名称更改为my_foobuilder
但是仍然安装相同(冲突的)Python软件包。然后,我可以使用my_foobuilder
将Conflict
包设置为foobuilder
。它可能要求用户在他们的包管理器中摆弄,以便在转换期间让事情重回正轨,但我认为这不是什么大问题。但是,这会阻止用户同时使用公共foobuilder
包。
是否有一种比我上面所考虑的更容易或更好的方法来治疗这种情况?我正在考虑的解决方案有什么问题吗?你会怎么处理这个?
答案 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:)