python pip优先顺序与index-url和extra-index-url

use*_*803 25 python pip pypi python-packaging

我搜索了一下但找不到明确的答案。
目标是拥有两个点指数,一个是私有指数,这将是首要任务。其中之一是标准 PyPI。首要任务是防止代码注入的安全风险。

假设我有一个名为 的库lib,并且我配置index_url = http://my_private_pypi_repoextra_index_url = https://pypi.org/simple

如果 I pip install lib、 和 都lib存在于两个索引中。什么索引会优先?将从哪里安装?

另外,如果pip install lib=0.0.2我的私有索引中存在 0.0.1 版本的 lib。它也会考虑 PyPI 吗?

什么是控制的好方法,某些库仅从私有索引中获取(如果它们存在),并且不会在 PyPI 中查找?

sin*_*roc 23

简短的答案是:没有优先级,您可能应该避免使用--extra-index-url完全避免使用。

\n
\n

这是在这里提出和回答的:https ://github.com/pypa/pip/issues/5045#issuecomment-369521345

\n

问题

\n
\n

我的 pip.conf 中有这个:

\n
[global]\nindex-url = https://myregistry-xyz.com\nextra-index-url = https://pypi.python.org/pypi\n
Run Code Online (Sandbox Code Playgroud)\n

假设两个注册表中都存在 packageX,并且我运行 pip install packageX。

\n

我希望 pip 从https://myregistry-xyz.com安装 packageX ,但 pip 将使用https://pypi.python.org/pypi代替。

\n

如果我切换 index-url 和 extra-index-url 的值,我会得到相同的结果。pypi 始终优先。

\n
\n

回答

\n
\n

包的名称和版本应该是唯一的,因此具有相同包名称和版本的两个轮子将被 pip 视为无法区分。这是包元数据的特意功能,不太可能更改。

\n
\n
\n

我还建议阅读此讨论:https://discuss.python.org/t/dependency-notation-include-the-index-url/5659

\n

这次讨论涉及很多事情,有些显然超出了这个问题的范围,但无论如何,一切都非常有用。

\n

那里应该有您的关键要点:

\n

理论上,Pip 并没有真正将一个指数优先于另一个指数。在实践中,由于代码中实现方式的巧合,可能总是先检查一个,但这不是您应该依赖的行为。

\n
\n

什么是控制的好方法,某些库仅从私有索引中获取(如果它们存在),并且不会在 PyPI 中查找?

\n
\n

您应该设置和管理自己的包索引(devpi、pydist、jfrog artifactory、sonatype nexus 等)并专门使用它,这意味着:永远不要使用--extra-index-url. 这是您可以精确控制下载内容的唯一方法。除了几个依赖项之外,这个自定义存储库可能主要充当公共 PyPI 的代理。

\n
\n

有关导致询问索引优先级顺序的某些原因的潜在解决方案,请关注“ PEP 708 \xe2\x80\x93 扩展存储库 API 以减轻依赖混淆攻击

\n
\n

有关的

\n\n