在 Windows 上安装 Python 后,通常需要将以下两个路径添加到环境变量 PATH 中,以便能够从命令行调用 Python 和相关工具(如 pip):
-
Python 安装目录:
- 该路径包含了
python.exe,是运行 Python 脚本的核心。 - 示例路径:
C:\Python39\(假设你安装了 Python 3.9)。
- 该路径包含了
-
Python 的
Scripts目录:- 该目录包含了
pip.exe和其他工具(如easy_install.exe、虚拟环境工具等)。 - 示例路径:
C:\Python39\Scripts\。
- 该目录包含了
- 将这两个路径添加到环境变量
PATH中,使得你能够在命令行中直接运行python和pip,无需指定完整路径。
-
打开 “环境变量” 设置窗口:
- 在 Windows 中,按下
Win + S,搜索 “环境变量”,然后选择 “编辑系统环境变量”。 - 点击 “环境变量” 按钮。
- 在 Windows 中,按下
-
编辑
PATH变量:- 在 系统变量 或 用户变量 中找到
Path,点击 编辑。 - 点击 新建,分别添加
C:\Python39\和C:\Python39\Scripts\。
- 在 系统变量 或 用户变量 中找到
-
保存设置并关闭。
-
User Variable(用户级变量):
- 仅对当前用户有效,其他用户无法访问。
- 适用于个人计算机或开发环境。
-
System Variable(系统级变量):
- 对所有系统用户都有效。
- 适用于所有用户需要使用的程序,通常需要管理员权限。
- Python Launcher(通常位于
C:\Windows\或C:\Python39\)是用于管理不同版本 Python 的工具。通过py命令可以选择运行特定版本的 Python,而无需显式指定版本号(如python3.8)。 Python Launcher路径被添加到环境变量后,你可以使用py命令来切换 Python 版本,但它本身不包含pip等工具,因此仍然需要将Scripts目录添加到PATH中。
- 答案:是的,你只需要将 Python 安装目录(
C:\Python39\) 添加到PATH中即可,不需要单独添加C:\Python39\Scripts\,因为Scripts目录是 Python 安装目录的子目录,系统会自动识别并搜索到它。 - 此处存疑,有些文档中说
PATH不会检索子文件夹,且Python自己的安装方式会把\Scripts也添加到环境变量中,需要进一步验证。 - 单独询问ChatGPT,它也回答说
在 Windows 中,设置环境变量后,不会自动检索其子文件夹。如果需要访问子文件夹中的文件或程序,你需要手动将这些子文件夹添加到环境变量中。
-
查看
PATH环境变量:- 打开命令提示符,运行
echo %PATH%,检查C:\Python39\和C:\Python39\Scripts\是否已包含在输出中。
- 打开命令提示符,运行
-
验证
python和pip命令:- 在命令提示符中运行:
python --version pip --version
- 如果返回 Python 和 pip 的版本号,说明配置成功。
- 在命令提示符中运行:
为了能够在 Windows 上从命令行调用 Python 和相关工具(如 pip),你需要将以下路径添加到 PATH 环境变量中:
- Python 安装目录(如
C:\Python39\) - Python
Scripts目录(如C:\Python39\Scripts\)
如果你只添加了 Python 安装目录(C:\Python39\),也能自动找到 pip 等工具,因为 Scripts 目录是安装目录的子目录。
此外,User Variable 和 System Variable 使你可以选择是否为当前用户或所有用户设置环境变量,通常添加到 User Variable 就足够了。
os.environ.get("PATH", "") 获取的是当前 运行环境的动态 PATH 变量,它是用户级和系统级环境变量的合并结果。
-
动态 PATH 的来源:
- 当你启动一个新的终端(如命令提示符或 PowerShell)时,系统会根据用户级和系统级 PATH 环境变量的值构建当前进程的动态 PATH。
os.environ["PATH"]访问的就是该进程的动态 PATH,它可以包含用户级和系统级 PATH 的内容。
-
区别:
- 系统环境变量:适用于所有用户,在注册表路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment下定义。 - 用户环境变量:只适用于当前用户,在注册表路径
HKEY_CURRENT_USER\Environment下定义。 - 动态环境变量:进程启动时由系统和用户环境变量合并生成,进程内独立管理,修改不会影响系统和用户级环境变量。
- 系统环境变量:适用于所有用户,在注册表路径
-
脚本中
current_path的作用:- 它只是获取当前运行进程的
PATH,用于检查或拼接路径。 - 修改后(例如通过
os.environ["PATH"] = ...),只会影响当前脚本运行期间的动态环境,不会永久影响用户级或系统级环境变量。
- 它只是获取当前运行进程的
你需要显式地访问注册表中的 Path 值:
-
用户级 PATH:
import winreg with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Environment") as key: user_path, _ = winreg.QueryValueEx(key, "Path") print("用户级 PATH:", user_path)
-
系统级 PATH:
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment") as key: system_path, _ = winreg.QueryValueEx(key, "Path") print("系统级 PATH:", system_path)
通过这种方式,你可以分别获取和修改用户级和系统级 PATH,而不是仅依赖动态 PATH。
os.environ["PATH"]访问的是动态 PATH,包含用户级和系统级的合并内容。- 如果需要明确修改用户级或系统级 PATH,必须使用注册表操作。