我已经使用这个命令很长一段时间了,直到最近它工作得很好。
alias pipup='sudo pip install --upgrade $(yolk -U | awk "{print $1} ")'
但是,每当包具有可用更新时,它最近开始失败并显示以下输出:
Exception:
Traceback (most recent call last):
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/commands/install.py", line 257, in run
InstallRequirement.from_line(name, None))
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/req.py", line 172, in from_line
return cls(req, comes_from, url=url, prereleases=prereleases)
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/req.py", line 70, in __init__
req = pkg_resources.Requirement.parse(req)
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/pkg_resources.py", line 2606, in parse
reqs = list(parse_requirements(s))
File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/pkg_resources.py", line 2532, in parse_requirements
raise ValueError("Missing distribution spec", line)
ValueError: ('Missing distribution spec', '(1.5.4)')
Storing debug log for failure in /Users/Bryson/.pip/pip.log
此别名在此实例中执行的 yolk -U
命令的输出为:
[14:05] Bryson@Zeus ~ :$ yolk -U
pep8 1.5.3 (1.5.4)
setuptools 3.4.1 (3.4.3)
[14:06] Bryson@Zeus ~ :$
当 yolk
没有返回软件包名称/版本时,该命令会正确输出以下内容,并且别名命令不会失败。相反,以下内容将正确打印到终端:
No newer packages found at The Cheese Shop
You must give at least one requirement to install (see "pip help install")
您的问题是awk "{print $1} "
中的$1
被内插为变量,导致命令awk "{print }"
被执行。后一个命令打印整行(而不仅仅是第一个字段),因此(1.5.4)
出现在pip
的命令行上。
它可能工作了一段时间,因为yolk -U
没有输出任何东西。
要修复,您可以转义$
:
alias pipup='sudo pip install --upgrade $(yolk -U | awk "{print $1}")'
或者只是使用cut
:
alias pipup='sudo pip install --upgrade $(yolk -U | cut -d" " -f 2)'