Pip 安装错误: 外部管理环境
有些 Python 安装允许用户自由添加软件包,而有些则由操作系统的软件包管理器严格管理。在这种受控环境中尝试使用 pip 安装软件包可能会导致外部管理环境错误。让我们来探讨一下出现这种情况的原因,并找到有效的解决方法。
什么是 “error: externally-managed-environment”?
当您尝试使用 pip 在一个由外部系统管理的 Python 环境中安装软件包时,会出现 Python 中的 externally-managed-environment 错误,例如操作系统软件包管理器或特定应用程序中捆绑的 Python 环境。该消息只是告诉您,在此环境中,软件包无法安装、修改或删除。
为什么会出现 “error: externally-managed-environment”?
externally-managed-environment 错误之所以会发生,是因为某些基于 Python 的环境施加了限制,以确保系统稳定并避免冲突,防止可能破坏系统或应用程序功能的未经授权的修改。
例如,Fedora 和 Debian 等 Linux 操作系统发行版都预装了 Python。由于这些环境没有官方 Python 发行版,大多数用户必须使用内置解释器。尝试使用 pip 安装软件包会使它们下载到全局环境中,这可能会与现有的系统软件包冲突,并导致意想不到的错误和问题。更糟糕的是,如果试图卸载或升级软件包,可能会完全破坏操作系统的功能,因为可能会意外删除核心组件。
针对这一问题提出的解决方案是:发行商可以使其 Python 解释器的软件包标记为由 Python 外部的方法管理。这样做会告诉像 pip 这样的工具,除非特别重写,否则它不应该以任何方式更改已安装的系统包。因此,如果尝试全局安装一个软件包,就会遇到 externally-managed-environement 错误。
如何解决 “error: externally-managed-environment”?
处 externally-managed-environemnt 错误可能令人沮丧,但有几种有效的方法可以绕过它。以下三种解决方案可以帮助您安装所需的 Python 软件包,而不会遇到这种障碍:使用虚拟环境、使用系统软件包管理器或强制安装。
使用虚拟环境
要克服externally-managed-environemnt 错误,创建和使用虚拟环境是主要的解决方案。虚拟环境使您的 Python 设置与整个系统的 Python 安装隔离开来,允许您安装和管理软件包,而不影响系统的其他部分。下面是设置虚拟环境的分步指南:
1. 确保已安装 venv。在某些操作系统上,如果没有 venv 模块,可能需要安装。在基于 Debian 的系统(如 Ubuntu)上,可以使用以下终端工具命令来完成安装:
sudo apt-get install python3-venv
2. 创建虚拟环境。导航至项目目录,然后使用此命令创建虚拟环境(把 envname 替换为您选择的名称):
python3 -m venv envname
3. 运行虚拟环境。激活虚拟环境以开始使用。操作系统不同,命令也不同:
Linux/macOS:
source myenv/bin/activate
myenv\Scripts\activate
4. 使用 pip 安装软件包。激活虚拟环境后,就可以安全地安装软件包,而不会出现外部管理环境错误。例如,运行以下命令安装请求库:
pip install requests
5. 停用虚拟环境。完成 Python 虚拟环境中的工作后,运行以下命令停用虚拟环境:
Deactivate
按照这些步骤,您的项目会与系统范围内的 Python 安装隔离开来。这有助于避免 externally-managed-environment 错误,并确保您的项目拥有一致和安全的环境。每个项目都可以拥有自己的依赖项,而不受全局 Python 设置的影响,从而避免可能出现的冲突。
使用系统的软件包管理器安装
使用系统的软件包管理器安装
避免错误的另一个有效方法是通过系统的包管理器安装所需的 Python 包,而不是使用 pip。这种方法可以确保兼容性,避免与系统的 Python 环境发生冲突。
1. 确定系统使用的软件包管理器。以下是最常见的软件包管理器列表:
基于 Debian 的系统(如 Ubuntu)–apt
基于 Red Hat 的系统(如 Fedora)–yum 或 dnf
基于 macOS 的系统 - brew
2. 接下来,更新软件包列表,以获得可用软件包的最新信息:
基于 Debian 的系统:
sudo apt-get update
基于 Red Hat 的系统:
sudo yum update
macOS 系统:
brew update
3. 搜索系统软件库中是否有可供安装的软件包:
基于 Debian 的系统:
apt-cache search <package_name>
基于 Red Hat 的系统:
yum search <package_name>
macOS 系统:
brew search <package_name>
4. 使用软件包管理器安装所需的软件包。软件包的名称可能与 pip 中的略有不同。例如,安装请求
基于 Debian 的系统:
sudo apt-get install python3-requests
基于 Red Hat 的系统:
sudo yum install python3-requests
macOS 系统:
brew install requests
使用系统的软件包管理器安装 Python 软件包有助于保持系统的稳定性,并确保以一致的方式管理所有依赖关系。这种方法利用系统的软件包管理功能来处理复杂的依赖关系,并与其他系统组件顺利集成。
强制安装
您可以使用 pip 和附加选项,绕过环境限制,在不出错的情况下安装软件包。由于这种方法可能会破坏系统的 Python 环境,因此应谨慎使用。下面是几种执行强制安装的方法:
在继续之前,请注意强制安装可能会导致与系统软件包冲突,从而可能造成不稳定或破坏系统的 Python 环境。如果您不确定自己在做什么,请使用虚拟环境或系统软件包管理器。
- 使用 --break-system-packages 选项–break-system-packages 选项。最新版本的 pip 包含–break-system-packages 选项,可以让 pip 忽略环境施加的限制。
pip install <package_name> --break-system-packages
2. 使用 --user 选项 --user 选项。它会在用户站点目录下安装软件包。这样就不需要管理权限,也降低了影响整个系统环境的风险。
pip install --user <package_name>
3. 使用–ignore-installed选项–ignore-installed选项。这是强制安装的另一种方法,可与 --user 选项结合使用,以提高安全性。
pip install --ignore-installed --user <package_name>
4. 结合使用 sudo(谨慎操作)。在万不得已的情况下,可以把 pip 命令与 sudo 命令结合使用,在系统级别强制安装。只有在绝对必要并充分了解潜在后果的情况下,才可以这样做。
sudo pip install <package_name> --ignore-installed
总结
当尝试在系统管理的环境中安装软件包时,Python 会出现 externally-managed-environemnt 错误,以确保稳定性并避免冲突。要解决这个问题,可以使用虚拟环境隔离设置,或通过系统的软件包管理器安装 Python 软件包。您也可以选择强制安装,但这样做有风险,应谨慎处理。
关于作者

James Keenan
资深内容作家
Smartdaili 的自动化和匿名传播者。他相信数据自由和每个人都有自主创业的权利。 James 在这里分享知识并帮助您在住宅代理方面取得成功。
Smartdaili 博客上的所有信息均按原样提供,仅供参考。对于您使用 Smartdaili 博客上的任何信息或其中可能链接的任何第三方网站,我们不作任何陈述,也不承担任何责任。