发布于2025年12月5日12月5日 TL;DR: pip install 即将推出。安装Python 包必须通过APT 完成。 Kali Linux 的包管理器。来自其他来源的Python 包应安装在虚拟环境中。 下面讲个长话。 一些背景 早在今年2 月的几天里,你们中的一些人可能已经尝试(但失败了)使用Pip 安装Python 软件包。 Python 的包管理器。突然它不再工作了,而是给出了这个错误消息: ┌──(root㉿kali)-[~] └─$ pip install xyz error: 外部管理环境 ?该环境由外部管理 ╰─ 要在系统范围内安装Python 软件包,请尝试apt install python3-xyz,其中xyz 是您要尝试的包 安装。 如果您想安装非Debian 打包的Python 包, 使用python3 -m venv path/to/venv 创建虚拟环境。 然后使用path/to/venv/bin/python 和path/to/venv/bin/pip。制造 确保你已经安装了python3-full。 如果您想安装非Debian 打包的Python 应用程序, 使用pipx install xyz 可能是最简单的,它将管理 为您打造的虚拟环境。确保您已安装pipx。 有关详细信息,请参阅/usr/share/doc/python3.11/README.venv。 note: 如果您认为这是一个错误,请联系您的Python 安装 或操作系统分发提供商。您可以覆盖此设置,但有损坏的风险 您的Python 安装或操作系统,通过传递--break-system-packages。 hint: 有关详细规范,请参阅PEP 668。 这一变化是在没有通知的情况下发生的,从我们收到的早期报告来看,很明显它会影响许多用户。所以我们恢复了它,因此pip install 如今仍然可以在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 应用程序无法工作的issues: 错误报告是很常见的,而且我们经常无法重现该问题,而且我们经常发现它无法工作,因为某些软件包或应用程序是通过pip 安装的,并干扰了通过APT 安装的其他软件包。这些重复出现的错误报告是不可操作的,我们无法修复任何问题。用户会被烧伤,他们会从中吸取教训,但这并不有趣。 发生了什么变化 现在,回到Kali Linux 中即将进行的更改:从Python 3.12 开始,pip 将拒绝执行系统范围的安装(sudo pip install) 以及用户主目录安装(pip install --user)。这是个好消息,因为这将使没有经验的用户更难破坏他们的系统。这是一个值得欢迎的变化,我们感谢那些推动这一变化并使之发生的人。从长远来看,每个人的痛苦都会减少。但短期内,一些用户不会喜欢它,我们当然知道。 因此,如果您是运行sudo pip install 的人之一,并且将其硬连线到您的Fingermldr 中;好吧,你必须调整。您可能想看看pipx,更熟悉Python 的虚拟环境,并花一些时间阅读PEP 668: 将Python 环境标记为外部管理,以更好地理解当前的问题。 最后,为了提供更广泛的背景:PEP 668 提案是各个软件发行版协调努力的结果,旨在解决pip 太容易破坏其他包管理器这一长期存在的问题。这一更改已经在其他Linux 发行版中生效(例如最新版本的Debian)。在Kali Linux中,我们只是延迟了一点,以便我们可以提前警告您,以便您可以调整您的工作流程和脚本。但这一变化将在Python 3.12 中到来,没有必要再拖延了。 感谢您的阅读!
创建帐户或登录后发表意见