python - 防止私有和基于 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 版本)?
解决方案
这可能不是你的解决方案,但我告诉我们我们做什么。
- 为包名称添加前缀,并使用命名空间(例如。
company.product.tool
)。 - 当我们安装我们的包(包括它们的内部依赖项)时,我们使用一个
requirements.txt
包含我们的 PyPI URL 的文件。我们在容器中运行所有内容,并在构建映像时在其中安装所有公共依赖项。
推荐阅读
- javascript - 为什么我的不和谐机器人的脚本显示“未捕获的语法错误:意外标识符”?
- teradata - 需要关于如何在 Teradata 中实现 FIFO 报告逻辑的建议
- python-3.x - 如何将 AWS Glue 作业连接到 Salesforce
- java - 编译多个包
- wsl-2 - 卡在 WSL2 中的 While 循环
- python - 我可以避免熊猫合并中正确数据框的连接列出现在输出中吗?
- java - android studio中的JAVA从不使用分配的值true
- python - 用 Selenium 打开网页并检查变量是否在正文中
- c# - 转置的可编辑 DataGridView
- javascript - 带有 IndexOf() 和 splice() 的数组函数