【问题标题】:pip: prioritize a private pypi serverpip:优先考虑私有 pypi 服务器
【发布时间】:2017-11-14 12:27:04
【问题描述】:

我正在使用 Artifactory 来托管大量的 python 模块。有几次,https://pypi.python.org/pypi 上的新 python 模块会以相同的名称上传。当有人尝试使用 pip 从 Artifactory 安装我的模块之一时,这会导致问题。默认情况下,pip 首先查找公共包。

这是我尝试过的:

1.我已经尝试相应地修改我的 .pypirc 文件,

[distutils] 索引服务器= 神器 皮皮

为两个索引服务器提供了适当的条目,但我相当肯定 pip 忽略了这些信息。

2。我已经尝试手动指定要使用的索引服务器。

我可以指定--index-url--extra-index-url,但是当公共包的版本号高于我的私人包时,后者没有帮助。如果我指定前者,则找不到公共依赖项!好像赢不了。

3.我尝试在 setup.py 中指定 dependency_links

...但根据此答案已弃用:pip ignores dependency_links in setup.py

如何将 pip 配置为首选我的 Artifactory 存储库而不是公共存储库?

【问题讨论】:

    标签: python pip


    【解决方案1】:

    这是无法实现的。

    pip 开发人员声明所有包索引始终具有相同的优先级,并且这不会改变。

    https://github.com/pypa/pip/issues/8606#issuecomment-788754817
    https://github.com/pypa/pip/issues/8606#issuecomment-665554122

    每个包都可以选择下载的索引。

    在两个索引中(无论它们是如何指定的),如果一个具有更高版本的包,则将选择该索引。如果版本相同,则选择是以某种未指定且不稳定的顺序进行的,您可能会碰巧遇到这种情况。

    如果您在事情似乎“工作”的情况下,请注意其他索引(如果不受您控制)可以随时发布更高版本,用户将获得一个,而是隐含的。
    当两个索引中只有一个当前具有某个包时,同样适用:每当另一个索引决定以该名称发布包时,用户可以隐式切换到该索引。

    https://github.com/pypa/pip/issues/8606#issuecomment-776623044


    pip devs 推荐的解决方案是直接使用你自己的包索引。通常这可能意味着首先镜像所有 PyPI,但实际上这不是必需的,因为有一些实现(例如“simpleindex”)可以根据它是哪个包显式将请求代理到不同的目的地。所以这将是真正的完整解决方案。

    https://github.com/pypa/pip/issues/8606#issuecomment-835201448

    另一个常见的建议是提前在 PyPI 上注册相同的包名,而不是在那里上传任何东西,这样你就可以拥有它,从而防止域名抢注攻击。 (尽管这仅说明 PyPI 是唯一涉及的公共索引的情况。通常,您需要预测您将依赖的所有公共索引并注册所有这些索引)。

    https://github.com/pypa/pip/issues/8606#issuecomment-822701285


    免责声明:我参与 Pip,仅总结我在链接问题和相关问题中阅读的信息。

    【讨论】:

    • 你不需要镜像 PyPI。诸如 simpleindex redirect 请求之类的工具,以便正常从 PyPI 中获取包,除非您有一条覆盖规则说它们应该以不同方式处理。
    【解决方案2】:

    不要这样做 ❌。
    我只是为了上下文而保留这个,但正如人们所指出的那样,这是不安全和错误的。 p>

    你能检查一下这是否有效:

    pip3 install --index-url https://artifactory.your.company.com/artifactory/api/pypi/your-pypi-here/simple --extra-index-url https://pypi.python.org/simple coolpackage
    

    这可以放在 ~/.pip/pip.conf 中以使其成为默认值。

    [global]
    index-url = https://artifactory.your.company.com/artifactory/api/pypi/your-pypi-here/simple
    extra-index-url = https://pypi.python.org/simple
    

    那你就可以了

    pip install coolpackage
    

    【讨论】:

    • 有效!不过,我想弄清楚如何将其设为默认值。
    • 由于某种原因这实际上不起作用! :( 我用另一个包试过了,它仍然从 pypi 中找到一个同名的包。
    • @Tom 你能试试strace -e open pip search coolpackage 2>&1 | grep pip.conf
    • 这是 pip 关于为什么这不起作用的解释:github.com/pypa/pip/issues/5045#issuecomment-369451195
    • 这不起作用而且很危险。请参阅我的答案中的详细信息。
    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2022-11-28
    • 2012-11-29
    相关资源
    最近更新 更多