pip --version 安装后返回 SyntaxError (无效语法)

fug*_*ggi 8 python python3 pip

操作系统:Debian 8

Python:v3.4.2(卸载了v2.7和v3.5以减少可能的根本原因)

我按照文档安装了 Python 3 的 pip:

sudo apt install python3-venv python3-pip
Run Code Online (Sandbox Code Playgroud)

然后,检查版本会导致语法错误:

$ python3 -m pip --version
Traceback (most recent call last):
  File "/usr/lib/python3.4/runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.4/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.4/dist-packages/pip/__main__.py", line 21, in <module>
    from pip._internal.cli.main import main as _main
  File "/usr/local/lib/python3.4/dist-packages/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

请注意 Python 版本 3.4 的路径,而以下检查指向版本 3.5:

$ pip --version
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 7, in <module>
    from pip._internal.cli.main import main
  File "/usr/local/lib/python3.5/site-packages/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

然而,which pip 指向另一条路径:

$ which pip
/usr/local/bin/pip
Run Code Online (Sandbox Code Playgroud)

出了什么问题?如何修复 PIP?

我需要它来安装 elastalert 工具。

到目前为止我已经尝试过:

  1. 卸载Python 3.5的PIP并再次检查版本。
  2. 卸载 PIP for Python 2.7 并再次检查版本。
  3. 卸载Python v3.5(apt remove --purge)并再次检查版本。
  4. 卸载Pyton v2.7并再次检查版本。
  5. 卸载Python v3.4并再次检查版本。
  6. 重新安装Pyhton v3.4并再次检查版本。

fug*_*ggi 16

根据phd的帖子,根本原因是默认安装的PIP版本与旧的Python版本3.4不兼容。关键线索是f""仅受 Python v3.6+ 支持。

所以我卸载了 PIP 并重新安装了 PIP 19.1.1,如下所示:

  1. 卸载发行版存储库提供的不兼容的 PIP:

    sudo apt remove --purge python3-pip
    
    Run Code Online (Sandbox Code Playgroud)
  2. 下载get-pip.py与我的 Python 3.4 版本兼容的版本:

    sudo apt remove --purge python3-pip
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装 PIP(在我的例子中使用sudo全局安装并将-E代理设置应用于sudo会话):

    sudo -E python3 get-pip.py
    
    Run Code Online (Sandbox Code Playgroud)
  4. 可选:升级 PIP 以确保其是最新的可用版本:

    sudo -E python3 -m pip install --upgrade "pip < 19.2"
    
    Run Code Online (Sandbox Code Playgroud)
  5. 检查版本:

    python3 -m pip --version
    
    Run Code Online (Sandbox Code Playgroud)

    输出:

    curl -O https://bootstrap.pypa.io/pip/3.4/get-pip.py
    
    Run Code Online (Sandbox Code Playgroud)