kali官方文档 --- Pip的安装方式和Python的外部管理安装方式 (2023年7月6日星期四)

发布时间 2023-07-09 10:12:21作者: GKLBB

TL;DR(译者注:"TL;DR"是"Too Long; Didn't Read 太长不看"的缩写,这是一个在互联网上常见的短语,用于表示对长篇内容的概括或摘要。):Pip install正在被淘汰。安装Python软件包必须通过APT,也就是Kali Linux的软件包管理器来完成。来自其他源的Python包应该在虚拟环境中安装。

下面的故事很长。

一些背景

早在今年2月,有几天,你们中的一些人可能试图用Pip(又称Python的软件包管理器)来安装Python软件包(但失败了)。突然间,它不再工作了,而是给出了这个错误信息:

┌──(root㉿kali)-[~]
└─$ pip install xyz
error: externally-managed-environment

? This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation
or OS distribution provider. You can override this, at the risk of breaking
your Python installation or OS, by passing --break-system-packages.

hint: See PEP 668 for the detailed specification.

这个变化是在没有通知的情况下发生的,从我们收到的早期报告来看,很明显,它将影响到许多用户。所以我们恢复了它,此pip安装现在仍然在Kali Linux中工作。但不会太久:当Python 3.12登陆Kali时(大约在2023年底或2024年初),它将停止工作,这次是永久性的。我们对此无能为力,这是一个上游的变化,我们必须顺其自然。

那么,为什么会有这种变化呢?为了在全系统范围内安装Python包,以root身份运行pip install,从来都不是一个好主意。在像Kali这样的Linux发行版中,Python包已经通过APT安装和管理了。如果你引入另一个软件包管理器(在这种情况下是 pip),它可能迟早会破坏由 APT 安装的软件包和程序。然后APT可能会再次破坏由pip安装的东西。两个包管理器会相互干扰,导致无休止的冲突。

你也可以运行pip install --user来在用户的主目录下安装包,但问题是一样的。这些包将会在Python应用程序运行时被使用,并且可能与由APT安装的其他包不兼容,导致程序运行异常或出错。

这个问题并不新鲜,但它对所有用户的影响并不一样。经验丰富的Linux发行版用户已经知道该做什么,不该做什么,他们可以在系统损坏时修复。然而,没有经验的用户不知道,所以他们很可能会自寻死路。没有人可以责怪他们,现在有很多网页推荐运行sudo pip install,却没有提供足够的背景说明。

我们(Kali开发人员,以及更广泛的发行版开发人员)非常清楚这个问题:Python应用程序无法正常工作的错误报告是很常见的,我们经常无法重现这个问题,而且我们经常发现它无法工作是因为某些包或应用程序使用pip安装,并与通过APT安装的其他包产生冲突。这些反复出现的错误报告并没有可操作性,我们无法在我们这边解决问题。用户会由此受到伤害并从中学到经验,但这并不好玩。

变化是什么

现在,回到即将到来的变化:在Kali Linux中,从Python 3.12开始,pip将拒绝执行全系统安装(sudo pip install)以及用户主目录安装(pip install --user)。这是一个好消息,因为它将使没有经验的用户更难破坏他们的系统。这是一个受欢迎的变化,我们感谢那些推动这一变化并使之发生的人。当然,我们知道,长期来看,这对每个人来说都会减少痛苦。但是短期内,一些用户不会喜欢它。

因此,如果你是那些习惯于运行sudo pip install的人之一,如果你已经把它内化到手指中... 好吧,你需要做些调整。你可能想着看一下pipx,更熟悉Python的虚拟环境,并花些时间阅读PEP 668: 标记Python环境为外部管理,以更好地理解当前的问题。

最后,给大家介绍一下更广泛的背景:PEP 668提案是由各个软件发行版协调努力而产生的,目的是修复这个长期存在的问题,即pip太容易破坏其他软件包管理器。这一改变在其他Linux发行版中已经生效(比如最新发布的Debian)。在Kali Linux中,我们只是稍微推迟了一下,这样我们可以提前警告你,以便你可以调整你的工作流程和脚本。但是这个变化将随着Python 3.12的到来而到来,没有必要再拖延了。

谢谢你的阅读!

https://peps.python.org/pep-0668/

https://pypa.github.io/pipx/

https://pip.pypa.io/en/stable/