首页 > 解决方案 > 防止私有和基于 pypi 的 Python 包之间的命名空间冲突

问题描述

我们有 100 多个私有包,到目前为止,我们一直在使用 s3pypi 在 s3 存储桶中设置私有 pypi。我们的私有包相互依赖(以及公共包),我们的 GitLab 管道找到它所依赖的最新功能版本的包(当然)很重要。即我们对最新签入的代码不感兴趣。我们只有在测试之后才创建新轮子,并且 qa 已经违背了对 master 的推动(这是一种冗长的解释-e <vcs>要求不起作用的方式)。

我们的设置工作得非常好,直到有人在官方 pypi 上创建了一个新的公共包,它隐藏了我们的一个包名称。我们可以通过增加版本号来强制选择我们的私有包,使其高于 pypi.org 上的新包 - 或者将我们的包重命名为尚未在 pypi.org 上使用的包。

这显然是一个 hacky 和脆弱的解决方案,但显然功能是这种方式设计的

在初始存储桶设置后,s3pypi 不需要维护或管理。上面的票建议使用devpi,但这似乎是一个非常繁重的解决方案,需要管理/监控/等。

GitLab 的 pypi 解决方案似乎是在单个包级别(这意味着我们必须列出多达 100 多个 url - 每个包一个)。这似乎不切实际,但也许我不理解某些东西(我也可以看到我们组下的包注册表菜单,但文档指向“package-pypi”文档)。

我们不能成为第一个面临这个问题的小公司..?有没有比在 pypi.org 上注册我们所有包的虚拟版本更好的方法(版本=0.0.1,所以首选 s3pypi 版本)?

标签: pythonpypi

解决方案


这可能不是你的解决方案,但我告诉我们我们做什么。

  1. 为包名称添加前缀,并使用命名空间(例如。company.product.tool)。
  2. 当我们安装我们的包(包括它们的内部依赖项)时,我们使用一个requirements.txt包含我们的 PyPI URL 的文件。我们在容器中运行所有内容,并在构建映像时在其中安装所有公共依赖项。

推荐阅读