Python pip freeze 中的三重等号和 ubuntu2 是什么?

kra*_*r65 7 python linux ubuntu pip amazon-web-services

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

python-apt===0.9.3.5ubuntu2
python-debian===0.1.21-nmu2ubuntu2
Run Code Online (Sandbox Code Playgroud)

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

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')
Run Code Online (Sandbox Code Playgroud)

我想知道这里有两件事:

  1. 为什么在版本末尾pip freeze使用ubuntu2
  2. 为什么pip freeze使用===代替==

[编辑]

还有一个问题:

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

Bur*_*lid 5

===任意的平等条款和PEP-0440的定义:

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

任意相等的主要用例是允许指定一个不能由此 PEP 表示的版本。这个操作符是特殊的,它充当逃生舱门,允许使用实现此 PEP 的工具的人仍然安装与此 PEP 不兼容的旧版本。

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

此运算符还可用于显式要求项目的未修补版本,例如 ===1.0,它与版本 1.0+downstream1 不匹配。

强烈不鼓励使用此运算符,并且工具可能会在使用时显示警告。

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


归档时间:

查看次数:

2383 次

最近记录:

10 年,2 月 前