【问题标题】:Does pip take into account the actual Python version when installing compatible package versions?pip 在安装兼容的包版本时是否考虑到实际的 Python 版本?
【发布时间】:2020-06-01 07:10:21
【问题描述】:

我有一个库必须支持从 2.6 开始的多个 Python 版本。例如,我的要求之一是requests。我知道支持 Python 2.6 的最新版本是 2.19.1(最新版本 2.20.0 支持任何 Python >= 2.7)。

所以我的问题是pip 是否理解需求中的requests~=2.19 行应该为Python 2.6 安装2.19.1 并为任何更高版本的Python 安装2.20.0

更新。问题不在于语法,我很好奇 pip 是否足够聪明,在 Python 2.6 环境中是否能够超越 0.19.1

【问题讨论】:

  • requests<=2.19.1 ; python_version<'2.7'
  • 可能不是对您(更新的)问题的直接回答,但可能值得深思……依赖 pip 是“”这一事实的问题足够聪明”,是 pip 依赖于项目的元数据,这可能是错误的。可能有一个新版本 2.19.3(或 2.21.999,或 2.* 中的任何内容)错误地标榜自己与Python 2.6(假设一个错误,不一定是恶意),pip 会安装它。因此,尽可能明确可能会更好。但从规格来看,requests~=2.19 似乎可以满足您的需求。

标签: python pip


【解决方案1】:

我相信是的,pip 确实考虑了当前运行的 Python 解释器的版本,以选择项目的适当版本(或版本的分发)安装。因此,由于pip install 'requests~=2.19' 相当于pip install 'requests>=2.19,requests==2.*',它应该从今天(2020-02-18)开始:

  • 请求 2.19.1Python 2.6 上;和
  • 请求 2.22.0Python 2.7 上。

【讨论】:

    【解决方案2】:

    据我所知,是的,可以在您的需求文件中使用 version specifiers

    例子:

    requests>=2.19.1,<=2.20.0
    

    使用 ~= 运算符将导致 Python 2.7 的包在 2.19 包范围内,因为这意味着:安装大于或等于 2.19.1 版本的包,但仍处于 2.19 版本。

    【讨论】:

    • 语法对我来说似乎是错误的(可能某处缺少逗号),这并不能回答有关 ~= 运算符的问题。
    • 对不起,我忘记了逗号。我更新了我的答案。
    • 嗯,根据official documentationrequests~=2.19的意思是requests&gt;=2.19,requests==2.*,不是吗?
    • 是的,你是对的。您需要记住一件事,即它也将采用较新的版本,如 2.3、2.4 等,这可能会导致以后出现不兼容问题。
    猜你喜欢
    • 2021-03-24
    • 2021-03-30
    • 2013-04-20
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2022-06-15
    相关资源
    最近更新 更多