在我的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')
我想知道这里的两件事情:
pip freeze
在版本的末尾使用ubuntu2
? pip freeze
使用===
而不是==
? [编辑]
还有一个问题:
===
和ubuntu2
(我试了两个)? ===
是任意的平等条款 ,在PEP-0440中定义:
任意的相等比较是简单的字符串相等操作,不考虑诸如零填充或本地版本的任何语义信息。 ==运算符也不支持前缀匹配。
任意相等的主要用例是允许指定一个不能由PEP代表的版本。 这个操作符是特殊的,可以作为一个逃生口,允许使用实现这个PEP的工具的某个人仍然安装一个与这个PEP不兼容的旧版本。
一个例子是=== foobar这将匹配一个foobar的版本。
这个操作符也可以被用来明确地要求一个未修补的项目版本,比如=== 1.0,这个版本不会匹配1.0版本的upstream1。
使用这个操作员是非常不鼓励的,工具在使用时可能会显示一个警告。
您应该在目标机器上升级您的pip版本( pip install --upgrade pip
),并且不应显示错误消息。