【问题标题】:What are triple equal signs and ubuntu2 in Python pip freeze?Python pip freeze 中的三等号和 ubuntu2 是什么?
【发布时间】:2016-03-29 19:08:06
【问题描述】:

在我的 AWS Ubuntu 14.04 实例上,我刚刚做了一个 pip freeze > requirements.txt,它给了我一个文件,其中还包括以下两行:

python-apt===0.9.3.5ubuntu2
python-debian===0.1.21-nmu2ubuntu2

当我使用此文件在另一个 AWS Ubuntu 14.04 实例上执行 pip install -r requirements.txt 时,我得到以下回溯:

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 262, in run
    for req in parse_requirements(filename, finder=finder, options=options, session=session):
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1632, in parse_requirements
    req = InstallRequirement.from_line(line, comes_from, prereleases=getattr(options, "pre", None))
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 173, in from_line
    return cls(req, comes_from, url=url, prereleases=prereleases)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 71, in __init__
    req = pkg_resources.Requirement.parse(req)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2667, in parse
    reqs = list(parse_requirements(s))
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2605, in parse_requirements
    line, p, specs = scan_list(VERSION,LINE_END,line,p,(1,2),"version spec")
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2573, in scan_list
    raise ValueError("Expected "+item_name+" in",line,"at",line[p:])
ValueError: ('Expected version spec in', 'python-apt===0.9.3.5ubuntu2', 'at', '0.9.3.5ubuntu2')

我在这里想知道两件事:

  1. 为什么pip freeze在版本末尾使用ubuntu2
  2. 为什么pip freeze 使用=== 而不是==

[编辑]

还有一个问题:

  1. 为什么另一台机器上的 pip 不接受===ubuntu2(我分别试过)?

【问题讨论】:

标签: python linux ubuntu amazon-web-services pip


【解决方案1】:

===arbitrary equality clause,在 PEP-0440 中定义:

任意相等比较是简单的字符串相等操作 它不考虑任何语义信息,例如 零填充或本地版本。该运营商也不支持 前缀匹配,就像 == 运算符一样。

任意相等的主要用例是允许指定 此 PEP 无法以其他方式表示的版本。这 操作员很特别,充当逃生舱口以允许某人使用 实现此 PEP 以仍安装旧版本的工具 否则与此 PEP 不兼容。

一个例子是 ===foobar ,它会匹配 foobar 的一个版本。

这个操作符也可以用来明确要求一个未打补丁的 项目的版本,例如 ===1.0,它不匹配 版本 1.0+downstream1 .

强烈建议不要使用此运算符,并且工具可能会显示 使用时发出警告。

您应该升级目标机器 (pip install --upgrade pip) 上的 pip 版本,它不应显示错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 2017-01-27
    • 2017-07-07
    • 1970-01-01
    • 2021-02-24
    • 2018-06-22
    • 2012-05-16
    • 2022-08-10
    相关资源
    最近更新 更多