装 Python 只有一步要留神:勾上 Add Python to PATH。不勾后面要手动补。 装完有三个路径要认清:解释器本身、它的根目录、它的模块搜索路径。 sys.path 一共 11 条,顺序有意义——靠前的先被找到,同名模块先到先得。
上一篇定了版本,这一篇动手装。教材用 Windows 举例,步骤照写。 安装界面本沙箱不执行,但装完之后「系统怎么找到解释器」这件事,可以现场打出来看。
一、下载与安装:两个页面要看清
从 python.org 下载 3.x 的 Windows 安装包。两个选择:64 位安装包,和 64 位可执行安装包。 前者是给全体用户装的(要管理员权限),后者只给当前用户装(不需要权限)。 安装界面的第一屏,最下面有一个勾选框:Add Python 3.x to PATH。这一勾是整篇文章的重点。
勾了,安装程序会往 PATH 里加两条:Python 目录本身,和它下面的 Scripts 目录。 不勾也能装成功,但命令行敲 python 会报「不是内部或外部命令」——下一篇专门讲这个。
二、IDLE 是什么
IDLE 是 Python 自带的编辑器,装完就有,不用另装。 它有两个窗口模式:一个是交互式(Shell),敲一行执行一行;一个是文件编辑,写完再整体跑。 交互式的用处是试:想确认 7 / 2 得几,敲进去立刻看到,不用建文件。
新手最该先用交互式:它把「写文件、保存、运行」这三步全省了,只剩「想—试」。 IDLE 的缺点也明显:没有自动补全、没有调试器、字体难看。所以第 2.4 篇换 PyCharm。
三、装完先认三个路径
装完之后有三样东西要分清,混了就会出各种怪问题。
| 名字 | 是什么 | 本机的实际值 |
|---|---|---|
| sys.executable | 解释器程序本身 | …\envs\default\Scripts\python.exe |
| sys.prefix | 这套 Python 的根目录 | …\envs\default |
| sys.path | import 时的搜索目录 | 11 条,见下方 |
sys.path 一共 11 条,其中目录真实存在的是 10 条——有一条是 .zip 包, Python 能直接从压缩包里导入模块。 第一条通常是脚本所在目录,所以你在项目里放一个 utils.py,同目录的脚本能直接 import。
四、顺序为什么重要
import 的时候,Python 按 sys.path 的顺序一条条找,找到第一个就停下。 所以「先到先得」不是比喻:靠前目录里的同名文件,会盖住靠后目录里的。 经典事故:自己在项目里建了一个 random.py,结果 import random 拿到的是自己的文件, 标准库的 random 反而找不到了。
这类报错看着莫名其妙,原因就在排序上。 报错原文是 AttributeError: module 'random' has no attribute 'randint'—— 它找到的 random 里根本没有这个函数。 排错办法:import 之后打一下 random.file,看它到底从哪儿来的。
五、装完该做的三件事
第一,重开一个命令行窗口,敲 python -V,看到 3.x 就成。 第二,敲 python -m pip -V,确认 pip 和 python 是同一套。两个版本不一致是下一个坑。 第三,敲 python -c "import sys; print(sys.executable)",把路径记下来。
这三件事花两分钟,能省掉后面几小时的困惑。
六、动手 Demo:装在哪:解释器是怎么被找到的
打出解释器路径、根目录、模块搜索路径的前几条,再数一下 path 有几条。 换一台机器跑,这些都会变——所以不要把路径写死在代码里。
import os
import sys
print("解释器 %s" % sys.executable)
print("根目录 %s" % sys.prefix)
print("path 共 %d 条,存在的 %d 条"
% (len(sys.path), len([p for p in sys.path if p and os.path.isdir(p)])))
for i, p in enumerate(sys.path[:4]):
print(" [%d] %s" % (i, p))
实跑输出:
--------------------------------------------------------------------
装在哪:解释器是怎么被找到的
--------------------------------------------------------------------
① 三个路径,三种含义
--------------------------------------------------------------------
sys.executable:当前这个解释器程序本身的路径。
C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe
sys.prefix:这套 Python 的根目录,标准库和 site-packages 都在它下面。
C:\Users\admin\.workbuddy\binaries\python\envs\default
sys.path:import 时按顺序找模块的目录列表,第一条通常是脚本所在目录。
[0] I:\Desktop\自我教学\.workbuddy\scripts\ch61_dev
[1] D:\WorkBuddy\resources\app.asar.unpacked\cli\vendor\shim
[2] C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\python313.zip
[3] C:\Users\admin\.workbuddy\binaries\python\versions\3.13.12\DLLs
! import 找不到模块,八成是 sys.path 里没有那个目录,而不是文件不存在。
② 同一个包,两套环境就有两个副本
--------------------------------------------------------------------
本机有两套解释器:一套是系统级的 3.13.12,一套是当前这个环境的 3.13.14。
它们各有各的 site-packages。在 A 里 pip install 的包,B 里看不见。
这就是「虚拟环境」要解决的问题:一个项目一套依赖,互不污染。
! 装完包提示成功、代码里却 import 失败,第一件事就是打 sys.executable 看是不是同一个。
③ 路径里有几条,直接数出来
--------------------------------------------------------------------
sys.path 一共 11 条,其中目录存在的是 10 条。
顺序有意义:靠前的先被找到,同名模块会「先到先得」。
! 自己写的文件叫 random.py 会把自己的文件当成标准库的 random——这是排序导致的经典事故。
④ 现场验证
--------------------------------------------------------------------
下面这段代码打出解释器路径、根目录、以及 path 的前几条。
换一台机器跑,这三样都会变,所以不要把这些路径写死在代码里。
! 要拼路径用 os.path.join 或 pathlib,不要手写反斜杠。
sys.executable 是排查环境问题的第一把钥匙:包装不上、import 失败,先看它指哪儿。
那个 os.path.isdir 过滤掉的是 .zip 路径。
sys.path 里可以有压缩包,它不是目录,但 Python 照样能从中导入模块。
30 秒实验
- 把 sys.path 全部打出来,看看哪一条是你当前脚本所在的目录。
- 在脚本目录里新建一个 random.py(内容随便),再 import random 看看会发生什么。
- 想一想:为什么 pip 装完的包在另一个 Python 里 import 不到?
常见误区
- 装 Python 不勾 Add to PATH:装完命令行找不到 python,还得手动改环境变量。
- 把路径写死在代码里:换机器就废,应该用 os.path 或 pathlib 现算。
- 文件名和标准库重名:random.py、json.py、types.py 都是经典事故。
- 不确认 pip 和 python 配不配对:装到 A 用 B,是最费时间的故障之一。
自测三问(点开对答案)
1. sys.executable 和 sys.prefix 有什么区别? —— 前者是解释器程序文件的路径,后者是这套 Python 的根目录,标准库和第三方包都在根目录下面。 2. 为什么自己建一个 random.py 会让 import random 出错? —— 因为脚本所在目录排在 sys.path 第一位,自己的文件先被找到,盖住了标准库的同名模块。 3. 装完 Python 立刻该验证哪三件事? —— python -V 看版本、python -m pip -V 看配对、打 sys.executable 看路径。装完了,但很多人卡在下一步:命令行敲 python,报「不是内部或外部命令」。 下一篇专门讲这个报错怎么读、怎么修。
- ☐ (本篇完,下一篇 2.3 第一个程序和「python 不是内部命令」)