【问题标题】:Pip name conflict点名冲突
【发布时间】:2015-08-03 17:54:10
【问题描述】:

我的项目依赖于一些公共包和一些私有包。其中一个私有包与 PyPi 上的另一个公共包同名(我们称之为“冲突”)。在我的 setup.py 文件中,我有

install_requires = ['public_a', 'public_b', 'conflicting' ],
dependency_links = ['https:blah/blah/blah/conflicting.git#egg=conflicting']

即使我在依赖链接中指定了 egg,pip 仍然会安装“冲突”的公共包。当出现名称冲突时,有没有办法优先考虑私有包?

【问题讨论】:

  • 您找到修复/解决方法了吗?
  • @augurar 很遗憾没有
  • 如果不能重命名私有包,您可以避免使用公共包使用的版本。因此,如果公共包有 1.0、1.1、1.2,您的私有包可以使用 1.0-pro、1.1-dev、1.​​2.111。然后在 install_requires 和 dependency_links 中显式设置版本。我不知道这在实践中是否有效。
  • @augurar 在下面查看我的答案。这是一个 hack,但它可以完成工作。

标签: python package pip setup.py pypi


【解决方案1】:

我知道这有点小技巧,但这很简单,而且确实有效:

将 100 添加到本地包的版本号。只要 pip 可以通过--extra-index--find-links options 找到您的本地包,它就会比较版本号并采用满足依赖包的 setup.py 中指定的版本控制约束的最高可用版本。如果你的包有更高的版本,它将获胜。

【讨论】:

    【解决方案2】:

    您可以设置自己的 PyPi 服务器并将其用作主要来源,将全局服务器用作次要来源。这将使您的包优先于公共包。

    例如手动: pip install --index-url=<your-pipy-server> --extra-index-url=https://pypi.python.org/simple <your package>

    当然,如果您尝试安装的版本在您的服务器上丢失但可以从有冲突的公共包中获得,则可能会发生错误。

    【讨论】:

    • 如果您的私有 pypi 服务器出现故障,我相信 pip 可能会(默默地)安装公共包
    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2018-12-11
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多