Python Pip 被 sys.stderr.write(f"ERROR: {exc}") 破坏 [英] Python Pip broken with sys.stderr.write(f"ERROR: {exc}")

查看:613
本文介绍了Python Pip 被 sys.stderr.write(f"ERROR: {exc}") 破坏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

On fresh Vagrant VM using box bento/centos-7 the following commands corrupt my pip installation:

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

If I then upgrade Pip I notice that my Python is broken. After that all pip commands end with 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 的已知问题吗?我该如何解决这个问题?

Why is this? Is this a known issue with Python? How do I fix this?

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

BTW, CentOS 7 is a given, we cannot upgrade to CentOS 8 at this point. Also, we are using Ansible so using virtualenv I think for target nodes is recommended against by the Ansible community.

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

We can install Python 3 of course on target nodes but not all Ansible code is available for combination Python 3 with CentOS 7.

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

Can we use Pip 20? We would like to upgrade to the most recent version of Pip that still works and I think that is Pip 20. How do I prevent upgrade to Pip 21?

推荐答案

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

You can get an older version (2.7) of get-pip.py

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

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

In my opinion, you should create a python2 virtualenv and install your python2 package in it, as well as pip2. For example, when I installed cuckoo sandbox, I did it like this:

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
python get-pip.py        # install pip in your virtualenv
pip install cuckoo       # install your python2 package

希望它会有所帮助.

这篇关于Python Pip 被 sys.stderr.write(f&quot;ERROR: {exc}&quot;) 破坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆