使用pip时,Shlex“没有收盘报价”错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pip时,Shlex“没有收盘报价”错误相关的知识,希望对你有一定的参考价值。
刚刚在我最近编译的Arch Linux笔记本电脑上安装了pip。我不能让它工作,但它总是向我抛出以下错误:
Exception:
Traceback (most recent call last):
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/commands/install.py", line 272, in run
with self._build_session(options) as session:
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/basecommand.py", line 72, in _build_session
insecure_hosts=options.trusted_hosts,
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/download.py", line 329, in __init__
self.headers["User-Agent"] = user_agent()
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/download.py", line 93, in user_agent
from pip._vendor import distro
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 1050, in <module>
_distro = LinuxDistribution()
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 592, in __init__
self._os_release_info = self._get_os_release_info()
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 845, in _get_os_release_info
return self._parse_os_release_content(release_file)
File "/tmp/tmpyantj7wc/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 876, in _parse_os_release_content
tokens = list(lexer)
File "/usr/lib/python3.6/shlex.py", line 295, in __next__
token = self.get_token()
File "/usr/lib/python3.6/shlex.py", line 105, in get_token
raw = self.read_token()
File "/usr/lib/python3.6/shlex.py", line 187, in read_token
raise ValueError("No closing quotation")
ValueError: No closing quotation
我还没有在其他任何地方看到过这种错误,我需要尽快完成一个完全正常工作的python环境。我认为这与我的发行版有关,所以我会把它放在这里,如果它可以帮助:
>>> uname -r
4.15.6-1-ARCH
>>> lsb_release
LSB Version: 1.4
>>> cat /etc/os-release
NAME="Reborn OS"
VERSION="Deepin-Reborn"
ID=Reborn OS
ID_LIKE=arch
PRETTY_NAME="Reborn OS"
ANSI_COLOR="1;34;40"
HOME_URL=""
SUPPORT_URL="https://forum.antergos.com/"
BUG_REPORT_URL="https://github.com/keeganmilsten
编辑:
好的,我在这里理解了这个问题,文件末尾缺少一个引号。我不知道它何时以及由谁修改过。问题解决了。
答案
问题的原因
经过一番挖掘后,似乎每个pip函数都实现了一些系统检查,即使是最简单的系统检查,如pip freeze
。正如@phd正确建议的那样,文件/etc/os-release
在运行基于Linux的发行版时由pip解析。
由于pip使用shlex
来解析这些文件,该函数引发了一个"No closing quotation"
异常,因为文件末尾缺少引号。添加一个解决了这个问题。
什么是这个文件,为什么格式不好?
/etc/os-release
文件是统一基于Linux的发行版显示发布信息的方式的一部分。正如官方文件中所述:
os-release包含由操作系统供应商定义的数据,通常不应由管理员更改。
这意味着我的Arch Linux版本(称为Reborn OS)的提供者可能在配置文件中留下了这个错误。该错误正在提交中。
以上是关于使用pip时,Shlex“没有收盘报价”错误的主要内容,如果未能解决你的问题,请参考以下文章
python, windows : 用 shlex 解析命令行