python命令调用path中第一个python可执行文件;which与–version不一致说明该路径是wrapper或symlink;macos homebrew默认只放python3,linux用update-alternatives,windows注册表影响双击但命令行仍由path决定;安全切换推荐alias、临时path或pyenv local;shebang用#!/usr/bin/env python同理查path,不支持python3.10等带版本名写法;pip必须与python配对,应优先用python -m pip;虚拟环境隔离site-packages,跨版本包不可混用。
Python 多版本共存时 python 命令到底调用哪个解释器?
它不看系统里装了几个 Python,而只看 PATH 环境变量中**最靠前的那个 python 可执行文件路径**。比如 /usr/local/bin/python 在 /usr/bin/python 前面,哪怕后者是系统自带的 3.9,前者是手动编译的 3.12,终端敲 python 就一定跑 3.12。
常见错误现象:which python 返回结果和 python --version 不一致(比如 which 显示 /opt/homebrew/bin/python,但 --version 却输出 3.9)——这说明该路径下是个 shell wrapper 或 symlink 指向了别处,得用 ls -l $(which python) 追到底层真实二进制。
-
macOS 上 Homebrew 安装的 Python 默认不覆盖
/usr/bin/python,而是把python3放进/opt/homebrew/bin/,且python软链到python3 - Linux 发行版(如 Ubuntu)常通过
update-alternatives管理多版本,python是个指向/etc/alternatives/python的 symlink - Windows 下若安装了多个 Python,控制面板“默认应用”或注册表
HKEY_CURRENT_USER\Software\Python\PythonCore可能影响双击 .py 文件的行为,但命令行仍由 PATH 决定
如何安全切换当前终端会话的 Python 解释器?
不要直接改系统级 symlink 或 PATH 全局变量,容易误伤其他工具链。推荐在当前 shell 中用 alias 或临时重定义 PATH:
- 临时 alias:
alias python=/usr/bin/python3.9,退出终端即失效 - 临时 PATH 调整:
PATH="/usr/bin:$PATH" python --version,只对当前命令生效 - 用
pyenv的pyenv local 3.11.8,会在当前目录生成.python-version,自动切换(前提是已用pyenv init配置过 shell)
注意:某些 IDE(如 VS Code)启动终端时会读取自己的 Python 扩展设置,可能绕过你 shell 里的 alias —— 此时需检查 IDE 的 python.defaultInterpreterPath 配置项。