Python Pip 被 sys.stderr.write(f"ERROR: {exc}")

时间:2021-01-26 05:33:33

标签: python pip

在使用 box bento/centos-7 的全新 Vagrant VM 上,以下命令破坏了我的 pip 安装:

yum update
yum install epel-release -y
yum install python-pip -y
/usr/bin/pip2 install --upgrade pip setuptools pyOpenSSL psycopg2-binary lxml

这最后失败了

  Downloading https://files.pythonhosted.org/packages/84/48/5c99d8770fd0a9eb0f82654c3294aad6d0ba9f8600638c2e2ad74f2c5d52/setuptools-52.0.0.tar.gz (2.1MB)
    100% |████████████████████████████████| 2.1MB 821kB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "setuptools/__init__.py", line 16, in <module>
        import setuptools.version
      File "setuptools/version.py", line 1, in <module>
        import pkg_resources
      File "pkg_resources/__init__.py", line 1367
        raise SyntaxError(e) from e
                                ^
    SyntaxError: invalid syntax

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-GZrC3W/setuptools/
You are using pip version 8.1.2, however version 21.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

如果我随后升级 Pip,我会注意到我的 Python 损坏了。之后所有 pip 命令都以 SyntaxError

结尾
[root@bkd-openam ~]# pip install --upgrade pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/9e/24/bc928987f35dd0167f21b13a1777c21b9c5917c9894cff93f1c1a6cb8f3b/pip-21.0.tar.gz
Installing collected packages: pip
  Found existing installation: pip 8.1.2
    Uninstalling pip-8.1.2:
      Successfully uninstalled pip-8.1.2
  Running setup.py install for pip ... done
Successfully installed pip-21.0
[root@bkd-openam ~]# /usr/bin/pip2 install --upgrade pip setuptools pyOpenSSL psycopg2-binary lxml
Traceback (most recent call last):
  File "/usr/bin/pip2", line 9, in <module>
    load_entry_point('pip==21.0', 'console_scripts', 'pip2')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax

这是为什么?这是 Python 的已知问题吗?我该如何解决这个问题?

顺便说一句,CentOS 7 是给定的,此时我们无法升级到 CentOS 8。此外,我们正在使用 Ansible,因此我认为 Ansible 社区建议不要将 virtualenv 用于目标节点。

我们当然可以在目标节点上安装 Python 3,但并非所有 Ansible 代码都可用于 Python 3 与 CentOS 7 的组合。

我们可以使用 Pip 20 吗?我们想升级到仍然有效的 Pip 的最新版本,我认为那是 Pip 20。如何阻止升级到 Pip 21?

12 个答案:

答案 0 :(得分:51)

您可以获得 get-pip.py 的旧版本 (2.7)

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py

在我看来,您应该创建一个 python2 virtualenv 并在其中安装您的 python2 包,以及 pip2。比如我安装cuckoo沙箱的时候是这样的:

virtualenv --python=python2 cuckoo/   # make your virtualenv folder with python2
cd cuckoo
source bin/activate
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py   # get pip for python2
python2 get-pip.py        # install pip in your virtualenv
pip install cuckoo       # install your python2 package

希望它会有所帮助。

答案 1 :(得分:40)

这个问题与 Python 2.7 的生命周期结束以及 PIP 社区本月停止支持这一事实有关。

PIP 显示弃用通知,例如

<块引用>

弃用:Python 2.7 已于 1 月 1 日结束其生命周期, 2020. 请升级您的 Python,因为 Python 2.7 不再维护。 pip 21.0 将在 2021 年 1 月放弃对 Python 2.7 的支持。 有关 pip 中 Python 2 支持的更多详细信息,请访问 https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 将取消对此功能的支持。

要解决此问题并继续使用不受支持的 Python 2.7,您不应升级到最新的 pip 版本,而应升级到 <21 版本。

pip install --upgrade "pip < 21.0"

答案 2 :(得分:35)

由于 PIP 放弃了对 Python 2.7 的支持,因此我们面临着上述问题,以下是在 Ubuntu 上实际对我有用的命令。

.tsv
<块引用>

输出:pip 20.3.4

CentOS 也可以通过更改包管理器名称来实现。

答案 3 :(得分:5)

更新:请使用以下命令在python2.7上安装pip

curl  https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python get-pip.py

享受吧!

答案 4 :(得分:3)

它的版本冲突问题。首先检查python --version,下面是python 2.7版的步骤

  1. curl https://bootstrap.pypa.io/2.7/get-pip.py -o get-pip.py
  2. python get-pip.py
  3. 安装虚拟环境: python -m pip install --user virtualenv
  4. 创建 venv: python -m virtualenv env
  5. 激活 venv: 源 env/bin/activate

答案 5 :(得分:3)

当您尝试升级 pip 时,它已升级到版本 21,如链接中所述:Python2-support

<块引用>

pip 20.3 是支持 Python 2 的最后一个 pip 版本。使用 pip 报告的仅在 Python 2.7 上发生的错误很可能会被 pip 的维护者关闭为“无法修复”问题。

所以现在你首先需要删除当前安装的 pip,你可以从 Centos 7:

yum remove python2-pip

现在我们将再次安装pip

yum install python2-pip -y

现在我们将pip升级到支持的版本

pip install --upgrade pip==20.3.4

现在 pip 命令可以正常工作

pip -V

答案 6 :(得分:2)

如果此逻辑用于(例如)不同 Python 版本的 Github Actions 矩阵,则以下 bash 片段将确定 pip 是否应在 pip 21.0 之前更新。例如,Python 3.5 不应更新超过 pip 21.0,但 Python 3.6 可以使用更新的版本。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs

答案 7 :(得分:2)

这对我有帮助(Ubuntu 16.04)

总的来说,我完全删除了 pip 和 pip3,例如:

whereis pip
sudo rm -f <results from whereis pip
whereis pip3
sudo rm -f <results from whereis pip3

搜索 pip 并删除文件和目录。就我而言,它是:

sudo rm -fr ~/.local/bin/pip3.5
sudo rm -fr ~/.local/bin/pip3
sudo rm -fr ~/.local/lib/python3.5/site-packages/pip*
sudo rm -rf ~/.cache/pip/
sudo rm -rf  /usr/lib/python2.7/dist-packages/pip*
sudo rm -rf  /usr/lib/python3/dist-packages/pip*

然后我再次安装了 pip3:

Python 3.5

wget https://bootstrap.pypa.io/pip/3.5/get-pip.py

Python 3.6

wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py --ignore-installed

答案 8 :(得分:0)

环境

Ubuntu 16.04 LTS 32 位。

async componentDidMount() {
    await this.getKeyForNextRequest();
    await this.loadGrids();
}

getKeyForNextRequest = async () => {
    const dataRequester = new DataRequester({
      dataSource: `${URL}`,
      requestType: "POST",
      params: {
      },
      successCallback: response => {
        console.log(response);
      }
});

dataRequester.requestData();
}
loadGrids = async () => {
    await this.loadGrid1ColumnDefs();
    this.loadGrid1Data();
    await this.loadGrid2ColumnDefs();
    this.loadGrid2Data();
}

Python 3.5

我在运行这些命令时遇到错误:

Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-209-generic i686)
<块引用>

回溯(最近一次调用最后一次):文件“/opt/certbot/bin/pip”,行 7、在 从 pip._internal.cli.main 导入主文件“/opt/certbot/lib/python3.5/site-packages/pip/_internal/cli/main.py”, 第 58 行 sys.stderr.write(f"错误:{exc}") ^ 语法错误:无效语法

$ sudo python3 -m venv /opt/certbot/ $ sudo /opt/certbot/bin/pip install --upgrade pip $ sudo /opt/certbot/bin/pip install certbot 只是 python3 的符号链接:

python3.5

Python 3.9

抛出另一个错误:

/usr/bin/python3 -> python3.5
<块引用>

错误:命令'['/opt/certbot/bin/python3.9'、'-Im'、'ensurepip'、 '--upgrade', '--default-pip']' 返回非零退出状态 1。

解决方案:Python 3.6

这些命令为我解决了问题:

$ sudo python3.9 -m venv /opt/certbot/

答案 9 :(得分:0)

我正在报告我的解决方案,因为它在 MacOS 上对我有用(而不是在 Linux 上,这些其他解决方案适用于 Linux)。希望这能帮助某人,以防他们在 Mac 上遇到类似问题。我正在运行 MacOS 11.4。 PIP 不知何故在我的系统上坏了。我的全局系统应该使用 Python3,但我收到错误消息:

 Traceback (most recent call last):
  File "/usr/local/bin/pip", line 11, in <module>
    load_entry_point('pip==21.0.1', 'console_scripts', 'pip')()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2843, in load_entry_point
    return ep.load()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2434, in load
    return self.resolve()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2440, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Library/Python/2.7/site-packages/pip-21.0.1-py2.7.egg/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax

我的解决方案正在运行:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py

现在 PIP 又可以在我的系统上运行了。

答案 10 :(得分:-2)

这些命令在 ubuntu 20.04 LTS 上为我解决了:

$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository universe
$ sudo apt install python2
$ curl https://bootstrap.pypa.io/2.7/get-pip.py | sudo python
$$ pip --version

https://linuxhint.com/install_python_pip_tool_ubuntu/https://unix.stackexchange.com/a/631283 中通过编辑第 5 个命令总结

答案 11 :(得分:-2)

在ubantu16.04上删除pip并重新安装

sudo apt-get remove --purge python-pip
sudo apt-get autoremove
rm -r /home/xxx/.local/bin/pip
rm -r /usr/local/bin/pip
sudo apt update
curl https://bootstrap.pypa.io/2.7/get-pip.py | sudo python
sudo ln /usr/local/bin/pip /home/xxx/.local/bin/pip