python-3.x requirements.txt中的每行索引URL

amrnrhlw  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(130)

假设我有以下PyPI:

  • 公共PyPi(标准包)
  • gitlab pypi(因为ABC内部团队希望使用它)
  • 伪品PyPi(因为承包商团队DEF希望使用它)

Now suppose package titled "ABC" exists on all of them, but are not the same thing (for instance, "apples," which are 3 entirely different packages on all pypis.). How do I do something in my requirements and setup.py to map the package name to the pypi to use?
类似于:

package_def==1.2.3 --index-url=artifactory
apples==1.08 --index-url=gitlab # NOT FROM PUBLIC OR FROM ARTIFACTORY
package_abc==1.2.3 --index-url=artifactory
package_efg==1.0.0 # public pypi

I don't even know how I'd configure the setup.py in this instance either.
我真的不希望在顶部有多个不同索引url的requirements.txt。我也不希望--extra-index-url,因为当使用私有pypi时,它可能会引入漏洞。
我试着在谷歌上搜索,打乱requirements.txt的顺序,把它分成不同的文件,等等。没有运气。似乎最后一个--index-url总是用来安装所有的包。
有什么想法吗?

3mpgtkmj

3mpgtkmj1#

这个问题又回到了这样一个想法,即包依赖性规范通常是一种需求状态,它独立于该需求应该如何被满足。
因此,依赖声明“foo==1.0.0”(声明为包元数据的一部分)意味着“我需要名为foo的包版本为1.0.0”,这在原则上是独立于实现的。您可以使用PyPI的pip安装该包,但您也可以使用不同的工具和/或不同的源代码来满足该要求(例如conda,installation-from-source,等等)。
这种区别就是为什么没有好的方法来做到这一点的原因。
以下是一些解决方法:

  • 您可以指定要pip安装的wheel的完整链接
  • 您可以使用另一种工具,如Poetry,它确实更清晰地支持这一点。

对于我的特定用例,我只是列出了我想pip安装的wheel的完整链接,因为升级到poetry目前不在范围内。

相关问题