使用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“没有收盘报价”错误的主要内容,如果未能解决你的问题,请参考以下文章

Lua相当于shlex?

python, windows : 用 shlex 解析命令行

Python shlex ??????

导入错误和未定义符号:dgesv_ 使用 PIP 安装 CVXPY 时出错

python—subprocessglob和shlex模块

使用 pip 安装 python 包时星号 * 的用途是啥