pip install --system 失败是因系统保护机制:/usr/lib/python3.x/site-packages 为只读路径,且 pip 禁止覆盖 apt/yum 管理的包,避免升级冲突、权限错误与版本混乱;推荐用 apt/yum 安装或 --user/venv 隔离。

不能也不该为所有用户全局安装 Python 包。这不是设计意图,且会破坏系统稳定性、引发权限冲突和包版本混乱。
为什么 pip install --system 会失败或被拒绝
Linux 发行版(如 Ubuntu、CentOS)预装的 python3 和 pip3 属于系统包管理器(apt / yum)管辖范围。直接用 pip3 install --system package_name 通常会报错:PermissionError: [Errno 13] Permission denied,因为 /usr/lib/python3.x/site-packages/ 是只读路径,且 pip 默认禁止覆盖系统包。
- 系统升级时可能覆盖或删除你手动 pip 安装的包
-
apt upgrade可能降级或移除 pip 安装的依赖,导致apt自身异常 - 多个用户共用同一 site-packages 目录,版本冲突无法隔离
真正可行的“全局可用”方案:使用 apt/yum 安装系统级 Python 包
如果你需要某个包对所有用户都可用(例如 imutils、requests),应走系统包管理流程,而非 pip:
- Ubuntu/Debian:
sudo apt install python3-imutils(注意命名规则:通常为python3-xxx) - CentOS/RHEL:
sudo yum install python3-imutils或启用 EPEL 后尝试python38-imutils - 不确定包名?先搜:
apt search imutils或dnf search imutils - 找不到对应包?说明该包未被发行版打包,此时不应强推全局 pip 安装
当必须用 pip 安装且需多用户访问时,用 --target + 环境变量
若某包确实没有系统包,又需让多个用户(不共享 home)都能 import,可手动部署到共享路径并修改 PYTHONPATH:
- 创建共享目录:
sudo mkdir -p /opt/python-global-packages - 安装到该目录:
sudo pip3 install --target /opt/python-global-packages requests - 让所有用户加载:
echo 'export PYTHONPATH="/opt/python-global-packages:$PYTHONPATH"' | sudo tee -a /etc/profile.d/python-global.sh - 生效:
source /etc/profile.d/python-global.sh - ⚠️ 注意:
--target不处理依赖自动递归,需手动确保依赖也装入同一目录;且无法卸载干净
最推荐的做法:放弃“全局 pip”,改用 per-user 或 venv
现代 Python 开发中,“为所有用户全局 pip 安装”是反模式。真正健壮的方案是:
- 普通用户用
pip3 install --user package_name:包装入~/.local/lib/python3.x/site-packages/,自动加入PATH和PYTHONPATH - 项目级隔离:每个项目用
python3 -m venv venv+source venv/bin/activate+pip install -r requirements.txt - 系统服务(如 systemd unit)明确指定解释器路径和虚拟环境路径,不依赖全局 site-packages
强行追求“所有用户都能 import xxx”往往暴露了环境管理松散的问题——真正该统一的不是包位置,而是依赖声明方式(requirements.txt)和执行上下文(显式激活的 venv)。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











