应优先用 which python 查真实路径再显式调用确认版本,注意 virtualenv/pyenv 影响、shebang 风险及系统服务兼容性,切换后务必在目标上下文验证。

查 Python 版本:别只信 python --version
Linux 上 python 命令可能指向 Python 2 或 Python 3,甚至根本不是系统默认的解释器。直接运行 python --version 容易误判当前实际使用的版本。
- 优先用
which python看命令真实路径,再配合/usr/bin/python --version显式调用确认 - 检查软链接:比如
ls -l /usr/bin/python,常会发现它指向python2.7或python3.9 - 终端里已激活 virtualenv 时,
python指向的是虚拟环境内的解释器,which python结果会是类似~/venv/bin/python - 想看所有可用版本?试试
ls /usr/bin/python*或pyenv versions(如果装了 pyenv)
切换系统级 Python 默认:update-alternatives 是正解
Ubuntu/Debian 系发行版用 update-alternatives 管理多版本共存,比手动改 /usr/bin/python 软链接安全得多;CentOS/RHEL 通常没预装该工具,需先 yum install alternatives 或改用 ln -sf(但风险更高)。
- 先注册候选版本:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1和sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2 - 交互式切换:
sudo update-alternatives --config python,选编号即可 - 切完务必验证:
python --version+python -c "import sys; print(sys.executable)" - 注意:某些系统服务(如
apt脚本)硬编码依赖/usr/bin/python2或/usr/bin/python3,改/usr/bin/python不影响它们,别乱动
virtualenv 和 pyenv 切换:项目级隔离才靠谱
系统级切换影响全局,多数开发场景真正需要的是 per-project 环境隔离。virtualenv(或 venv)和 pyenv 各有定位:前者管「同一 Python 版本下的包隔离」,后者管「不同 Python 版本间的解释器切换」。
- 新建项目环境:
python3.9 -m venv myproject→source myproject/bin/activate→ 此时python就是 3.9 - 用 pyenv 装新版本:
pyenv install 3.11.8→pyenv local 3.11.8(当前目录生效)或pyenv global 3.11.8(用户级) - pyenv 的
shims机制会拦截python调用,所以必须确保~/.pyenv/shims在$PATH最前面,否则which python还是看到系统原版 - 冲突常见于 shell 初始化文件(
~/.bashrc或~/.zshrc)里 pyenv 初始化代码被注释或位置靠后
Python 脚本开头写 #!/usr/bin/env python 很危险
这行 shebang 看似通用,实则把执行权完全交给当前 $PATH 中第一个 python,而这个顺序受 shell 配置、virtualenv 激活状态、pyenv shims 影响极大,极难预测。
- 生产脚本建议写死路径,比如
#!/usr/bin/python3.9或#!/home/user/.pyenv/versions/3.11.8/bin/python - 若必须兼容多环境,改用
#!/usr/bin/env python3,至少限定主版本,避免 Python 2/3 混淆 - 用
file script.py可查看脚本是否真的按预期解析(输出里会带 interpreter 路径) - 在 systemd service 或 cron 里跑脚本时,
$PATH和交互式 shell 完全不同,shebang 写得模糊 = 定期出问题
which python 和 python -c "print(__import__('sys').version)"。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










