pip和pip3并非独立工具,而是同一套代码在不同python版本下的入口,实际行为取决于绑定的解释器;关键看pip --version括号中显示的python x.y版本。

pip 和 pip3 不是两个独立工具,而是同一套代码在不同 Python 版本环境下的“别名”或“入口”,实际行为完全取决于你系统里哪个 Python 解释器绑定了它。
pip 和 pip3 指向的到底是哪个 Python?
运行 pip --version 和 pip3 --version,你会看到类似这样的输出:
pip 24.1.1 from /opt/anaconda3/envs/myenv/lib/python3.10/site-packages/pip (python 3.10) pip3 24.1.1 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
关键看括号里的 (python X.Y) —— 这才是决定包装到哪、能不能被 python3 导入的核心依据。常见现象包括:
- 明明只装了 Python 3.10,但
pip --version显示(python 2.7):说明这个pip是旧系统残留,或由 Python 2.7 安装时写入 PATH 的 -
pip3 install requests成功,但python3 -c "import requests"报错ModuleNotFoundError:大概率pip3装到了另一个 Python 3 环境(比如系统自带的 3.9),而你当前python3是 3.10 - 用 conda 创建的虚拟环境里,
pip和pip3都指向该环境的 Python,此时二者完全等价
什么时候必须用 pip3?
只有当你系统中同时存在 Python 2 和 Python 3,且希望明确指定用 Python 3 的 pip 时,pip3 才有区分意义。但注意:
- macOS 或 CentOS 等系统自带 Python 2.7,你又手动装了 Python 3.x:此时
pip默认走 2.7,pip3才走你装的 3.x - Ubuntu 22.04+ 默认已移除 Python 2,
pip就是pip3,强行用pip3反而可能调用到系统旧版(如 3.8),而你的项目用的是 pyenv 管理的 3.12 - 在 Docker 官方
python:3.12-slim镜像里,pip和pip3都指向 3.12,用哪个都一样
怎么避免踩坑?最稳的操作路径
别依赖 pip 或 pip3 命令本身,直接绑定到解释器:
- 安装包时统一用:
python -m pip install xxx(当前终端激活的 Python 解释器决定目标环境) - 查已装包:
python -m pip list,而不是pip list - 升级 pip 自身:
python -m pip install --upgrade pip,防止升级了全局 pip 却没动当前环境的 - 确认当前 python 是哪个:
which python(macOS/Linux)或where python(Windows),再和python -c "import sys; print(sys.executable)"对照
虚拟环境里 pip 和 pip3 还有区别吗?
没有。只要你用 python -m venv .venv 或 python3 -m venv .venv 创建环境,激活后(source .venv/bin/activate 或 .venv\Scripts\activate),里面的 pip 和 pip3 都指向该环境的 Python 解释器。此时 pip install flask 和 pip3 install flask 效果 100% 相同。
但要注意:如果你在未激活状态下,直接用绝对路径调用 /path/to/.venv/bin/pip install,那没问题;可一旦你只敲 pip,系统会按 PATH 顺序找第一个匹配的,未必是你想要的那个。











