必须避免在系统python中直接pip install,因其被apt/yum等包管理器深度绑定,手动安装会破坏系统工具依赖、引发版本冲突甚至导致系统崩溃;应使用python3-venv创建隔离环境。

为什么不用系统 Python 直接 pip install?
Linux 服务器上的 python3 往往是系统关键组件依赖的运行基础,比如 apt、systemd 工具链甚至部分安全更新脚本都可能调用它。直接在系统 Python 的 site-packages 里装包,轻则导致某次 apt upgrade 失败,重则让 journalctl 或 useradd 命令突然报 ImportError。这不是危言耸听——Ubuntu/Debian 的 /usr/lib/python3/dist-packages/ 和 CentOS 的 /usr/lib64/python3.x/site-packages/ 都属于操作系统管理范围,不该手动写入。
venv 比 virtualenv 更推荐,但得先装对东西
Python 3.3+ 自带 venv 模块,无需 pip install,但它在多数 Linux 发行版中是**分离安装包**:
- Ubuntu/Debian:运行
sudo apt update && sudo apt install -y python3-venv - CentOS/RHEL 8+:运行
sudo dnf install -y python3-virtualenv(注意不是python3-virtualenvwrapper) - 验证是否就绪:
python3 -m venv --help不报错即成功 - 别试
pip install venv——这包不存在,venv是内置模块,不是 PyPI 包
创建和激活环境时最常踩的三个坑
创建后 pip 安装的包没进 site-packages,90% 是因为没真正激活或激活失败:
- 必须用
source venv/bin/activate,不是sh venv/bin/activate(后者不修改当前 shell 环境) - 激活后检查:
which python应该输出类似/path/to/venv/bin/python,而不是/usr/bin/python3 - 检查
echo $PATH开头是否含venv/bin;若没有,说明source执行失败(常见于权限不足或venv/bin/activate文件不可读) - 如果用了 zsh 或自定义 shell,确认没被
cd自动激活插件干扰——先手动source一次再判断
要不要加 --system-site-packages?
这个参数会让新环境“看到”系统已装的包(如 numpy、psycopg2),省下载时间,但代价是失去彻底隔离:
- 系统里某个包升级或卸载,可能悄悄影响你的项目
- 部署到另一台服务器时,因系统包版本不同,行为可能不一致
- 除非你明确知道要复用系统预装的 C 扩展(比如某些发行版自带编译好的
pyyaml),否则建议不加 - 真需要加速安装,用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple换源更安全
实际项目里最容易被忽略的是:创建环境后没立刻运行 python -m pip install --upgrade pip。系统自带的 pip 版本往往太老,后续装包会因解析 pyproject.toml 或依赖约束失败而卡住——这一步不能省,也不能等报错后再补。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











