【发布时间】:2019-09-20 04:08:02
【问题描述】:
我有一个带有requirements.txt 的应用程序,其中包括许多第三方库以及一个必须从私有pypi 实例下载的内部包。比如:
boto3
flask
flask-restplus
gunicorn
an_internal_package
问题是an_internal_package 被命名为很常见的东西,并且遮挡了全局 pypi 上已经可用的包。例如,我们称之为twisted。我遇到的问题是在requirements.txt 中设置--extra-index-url 似乎仍然从全局pypi 中获取twisted。
--extra-index-url=https://some.internal.pypi.corp.lan
boto3
flask
flask-restplus
gunicorn
twisted # actually an internal package
我怎样才能指出twisted 应该只从私有pypi 加载,而不是从全局加载?
【问题讨论】:
-
务实的解决办法是重命名内部包,避免名称冲突。
-
Finding Packages 来自 PyPA 状态:
There is no ordering in the locations that are searched, rather they are all checked, and the “best” match for the requirements- 它引用了一个 PEP,这似乎表明您需要通过版本控制来解决这个问题。 ...相关-Private PyPI containing package with same name(答案)。 -
@wim 是的,我认为你是 100% 正确的。正如 wwii 所表明的那样,pip 几乎无法控制找到包的位置。
-
如果您可以选择内部 PyPI 服务器,请考虑使用
devpi,因为它具有内置的欺骗保护 - 一旦您将包上传到内部服务器,它就会停止在其他地方寻找其他版本。因此,您可以将需要的版本中的twisted上传到devpi,使用--index-url指向它,然后devpi将完成剩下的工作。