一、核心问题
最近在 Windows 机器上装 Python,去官网下载的安装包不再是传统的 exe,而是一个叫 python-manager-25.0.msix 的东西,官方称之为'Python Install Manager'。按照官方的说法,这种方式将成为未来的主流。
The Python install manager for Windows is our tool for installing and managing runtimes. The traditional executable installer will stop being released with Python 3.16.
但当你真用这种方式装完 Python 后,大概率会遇到两个头疼的问题:
- pip 命令无法使用:虽然
python -V正常,但输入pip直接报错。原因通常是 Python 安装目录下的 Scripts 文件夹没被添加到系统环境变量 Path 中。 - 多版本切换困难:默认情况下
python -V总是调用最新安装的版本。如果想动态切换系统当前的 Python 版本,这就成了个亟待解决的难题。 - py 与 python 的关系:在命令行执行
python -V和py -V时,输出竟然一模一样。这两个命令到底啥关系?
本文将主要介绍这些问题的解决方案,并对关键机制做点说明。
二、基础概念解析
1. python vs py 命令
- python (工人):直接调用
python.exe。它依赖环境变量 PATH,谁排在前面就启动谁,不灵活,容易版本冲突。 - py (工头):Windows 独有的 Python 启动器。它不依赖 PATH,而是扫描注册表。
py:自动启动最新版。py -3.8:强制启动 3.8 版本。
结论:在 Windows 命令行里,可以用 py 全面替代 python(仅限 Windows 环境)。
下面这几个 py 命令值得重点关注:
# 列举当前安装了哪些版本的 Python,* 符号标记的是当前正在使用的版本
py --list
# 使用 3.13 版本的 Python 运行指定脚本
py -3.13 xxx.py
可以发现 py 命令是严格区分版本的。截止目前,py 还没有那种可以动态切换当前正在使用的 Python 版本的命令,官方的意图似乎是希望开发者时刻清楚命令和版本之间的对应关系。
此外,当你使用 Python Install Manager 安装 Python 时,默认会把 Python 安装到 C:\Users\你的用户名\AppData\Local\Python 下面,还会把对应的 bin 文件夹自动添加到系统环境变量(当前用户的 Path 变量)中。
![图:Python 安装目录及环境变量配置示例]
2. 怎么运行 pip 来安装依赖呢?
假定我现在需要使用 pip 来安装 uv,现在则需要使用下面的命令:
py -m pip install uv
这比我们之前直接安装指定版本的 Python 时需要额外增加一个前缀 py -m。这个 -m 参数的含义是告诉 Python 不要运行文件,而是去已安装的库里找叫 pip 的模块并运行它。
通过上面的命令安装 uv 之后你会发现两个问题:
- 直接在终端使用 uv 会报错:提示找不到可运行文件。
其实这很好理解。使用上面的命令会把 uv 放到当前正在运行的 Python 安装目录的 Scripts 目录下,而这个目录还不在系统 Path 环境变量下,自然提示找不到。
![图:uv 安装路径与环境变量缺失示意图]

