Linux中pip随Python 3.4+自带,但发行版常将其拆为独立包;需用apt/dnf/yum/pacman安装python3-pip,禁用get-pip.py;优先用python3 -m pip或--user安装,开发务必用venv隔离。

pip 在 Linux 上不是“安装”出来的,而是随 Python 一起来的
Python 3.4+ 自带 pip,但很多 Linux 发行版(尤其是 CentOS/RHEL、Ubuntu 最小安装)会把 pip 拆成单独的包,不装就真没有——不是坏了,是压根没放进去。
常见错误现象:pip: command not found,但 python3 --version 正常;或者 python3 -m pip --version 能跑,pip3 却报错。
- Ubuntu/Debian:运行
sudo apt install python3-pip(别装python-pip,那是 Python 2 的) - CentOS/RHEL 8+:用
sudo dnf install python3-pip - CentOS/RHEL 7:用
sudo yum install python3-pip(需启用 EPEL 源) - Arch Linux:
sudo pacman -S python-pip
注意:不要用 get-pip.py 手动装,除非你明确在用自己编译的 Python 或虚拟环境里缺 pip——系统 Python 用包管理器装更稳,路径和权限不会乱。
pip3 和 pip 到底该用哪个?
多数现代 Linux 发行版中,pip3 是明确指向 Python 3 的命令,而 pip 可能不存在、指向 Python 2(已废弃),或被发行版 alias 成 pip3。别猜,直接查:
立即学习“Python免费学习笔记(深入)”;
- 看它指向哪:
ls -l $(which pip)或pip --version - 保险起见,统一用
python3 -m pip:它绕过 shell PATH,100% 调用当前python3对应的 pip,最可靠 - 如果非要配
pip命令,建议只在个人环境加 alias:alias pip='python3 -m pip',写进~/.bashrc,别全局改系统行为
混用 pip 和 pip3 容易导致包装到错解释器下,尤其当你同时有系统 Python 和 pyenv/conda 时,pip list 和 python3 -m pip list 结果可能完全不同。
权限错误:PermissionError: [Errno 13] Permission denied
这是新手最常卡住的地方——不是 pip 不行,是你试图往系统目录里写东西。
- 别加
sudo pip install:这会污染系统 Python,可能破坏包管理器(apt/dnf)对 Python 包的跟踪,后续升级出问题 - 首选方案:用
--user参数,例如pip3 install --user requests,包装进~/.local/lib/python3.x/site-packages/,二进制进~/.local/bin/ - 记得把
~/.local/bin加进$PATH(检查echo $PATH,没出现就加到~/.bashrc末尾:export PATH="$HOME/.local/bin:$PATH") - 开发项目务必用虚拟环境:
python3 -m venv myenv && source myenv/bin/activate,之后所有pip install都安全隔离
系统级安装只留给运维场景,比如 Dockerfile 里用 apt install 装基础依赖,而不是运行时 pip install。
国内用户装包慢或超时,别急着换源
网络问题确实存在,但先确认是不是 DNS 或代理干扰了 pip 默认的 HTTPS 连接。
- 先试
pip3 install -v requests(加-v看详细日志),观察卡在哪一步:是域名解析失败?TLS 握手超时?还是下载中途断? - 临时换清华源只需加参数:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests - 永久配置写进
~/.pip/pip.conf(Linux/macOS):[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple/ trusted-host = pypi.tuna.tsinghua.edu.cn
- 注意:某些企业内网或教育网会拦截第三方源,反而用默认源更稳;换源后首次安装可能仍慢——因为 pip 要校验包签名,不是单纯下载
真正麻烦的是交叉编译环境或离线部署:这时候得提前 pip download 下好 wheel,再用 --find-links 和 --no-index 装,不是换源能解决的。











