如何防止Pypi软件包维护者决定删除软件包?

时间:2018-03-20 13:44:56

标签: python pypi

似乎可以删除Pypi的包(或包版本):How to remove a package from Pypi

如果您已完成某些软件的开发并希望能够在构建时从Pypi中获取依赖关系,那么这可能是一个问题。

防止这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

Unnecessary_intro =<< SKIP_HERE

事实上,这是一个比防止另一个Leftpad实例更深层次的问题。 通常,依赖关系管理的实践由社区规范定义,这些规范通常是隐含的。 Python在这个意义上尤其糟糕,因为它不仅仅隐含着这些规范,它的包管理工具也建立在不保证依赖性兼容性的前提下。自PyPI出现以来,软件包安装程序都不能保证安装兼容版本的依赖项。如果包A要求包B == 1.0和C == 1.0,并且C要求B == 0.8,则在安装A之后,您可能最终得到B == 0.8,即A依赖性不会得到满足。

SKIP_HERE

0。明智地选择,使用信号。

开发人员和软件包维护人员都了解这种情况。人们试图通过选择" good"来尽可能减少这种中断的可能性。项目,即拥有一个健康的社区,一个人不太可能做出这样的决定,并且能够在不太可能发生的情况下恢复项目。

设计和评估这些信号是一个积极研究的领域。最常用的因素是包裹贡献者的数量(公共汽车因素),健康实践(测试,CI,文档质量),GitHub上的分叉数量,星星等。

1。复制源树下的包裹代码

如果您不希望软件包发生很大变化但是害怕软件包删除或破坏更改,那么这是最简单的方案。它还为您提供了根据您的需求定制包装的优势;另一方面,软件包更新现在将需要相当多的努力。

2。在PyPI

上重新发布包的副本

我不记得确切的名字,但是一些高调的包被其他开发者以不同的名称重新发布。在这种情况下,您只需要复制包文件并重新发布,这可能比在源树下维护副本要便宜。但是看起来很脏,我不鼓励这样做。

3。私有PyPI镜像

#2更清洁但更昂贵的版本。

4。另一层抽象

有些人选择了很少的竞争选择,并在其上创建抽象,能够使用不同的"后端"。其原因通常是不应对可能的包删除,并且取决于接口的复杂性,它可能非常昂贵。这种抽象的一个例子是Keras,它是神经网络的抽象,它为tensorflow和theano后端提供了一致的接口

5。还有更多选择

更多奇特的选择包括分发虚拟环境/容器/虚拟机的快照,重新实现行李(特别是因为许可问题)等。

答案 1 :(得分:1)

您可以创建自己的本地PyPI镜像(在策略中更新,添加,删除软件包),并使用本地PyPI镜像进行将来的软件包安装/更新。完整的镜像PyPI将消耗大约30GB的存储空间,因此您只需要30-40GB的存储空间。

有很多方法可以创建本地pypi镜像。例如How to roll my own pypi?