第1章:Getting Started
建立 Python 3.11+ 编程环境,贯通 VS Code、终端、解释器、Hello World 与分层排错。
学习目标
- 能描述编辑器、终端、启动命令和 Python interpreter 的责任边界,并确认实际 Python version
- 能实现并从 VS Code 与终端分别运行
hello_world.py,写出文件到 stdout 的完整执行链 - 能分析 command not found、can't open file 与 SyntaxError,复现根因并完成最小修复
为什么第一章先建立可观察的执行环境
初学者看到“程序没有运行”,常把编辑器、Python和代码混为一个系统。实际上VS Code只负责编辑并调用某个解释器;终端负责启动进程;Python interpreter读取.py文件、解析语法并执行;程序再把正常结果写到stdout、把错误和traceback写到stderr。分清这四层,之后每个错误都有明确检查点。
第三版以Python 3.11和VS Code为教学环境,但目标不是依赖某个按钮。真正可迁移的能力是:知道代码保存在哪里、哪个executable运行它、工作目录是什么、输入输出出现在哪里。先预测:同一文件在编辑器能运行、终端却报错时,代码本身是否一定有问题?
↡由editor、terminal、Python executable、working directory和项目文件共同组成的可复现运行上下文。选择解释器:版本号只是第一份证据
选择操作系统并查看启动命令
在Windows、macOS、Linux上,Python on Different Operating Systems的安装入口不同,但验证动作相同:命令可找到、版本符合要求、executable身份稳定。下面命令不会修改环境,只输出source of truth。
# Windows PowerShell
py --version
py -c "import sys; print(sys.executable); print(sys.version)"
# macOS / Linux
python3 --version
python3 -c "import sys; print(sys.executable); print(sys.version)"若终端显示多个Python version,不要先卸载任何版本。先记录每条命令对应的路径,再选定本书项目使用的一条。后续安装包也必须用同一解释器调用-m pip,否则容易出现“安装成功但import失败”。
Hello World Program:追踪文件到输出
创建一个明确的项目目录,把文件命名为hello_world.py。文件扩展名必须是.py,不能只是界面隐藏扩展名后的hello_world.py.txt。输入下面代码并保存:
message = "Hello Python world!"
print(message)逐步追踪执行链
从终端执行时,先进入文件所在目录,再运行系统对应的python command:
cd path/to/python-crash-course
python3 hello_world.py # macOS / Linux
# py hello_world.py # Windows运行不是“点一下按钮”,而是一次可验证协议:输入是解释器路径、源文件路径和环境;输出是exit code、stdout与stderr。成功时exit code为0并出现预期文本;失败时保留完整traceback,不能只截取最后一句。
↡从保存源文件、选择解释器、解析语法到执行并写出stdout/stderr的连续因果链。Troubleshooting:按层定位而不是反复重装
选择一个可观察故障
1. syntax highlighting 不出现
先确认文件已保存为.py,VS Code右下角语言模式为Python,并已启用Python扩展。syntax highlighting只是编辑器识别文件的证据,不证明Python已经安装,也不证明当前代码可执行。
2. command not found
这条错误发生在解释器启动之前。检查官方安装是否完成、关闭并重开终端、尝试系统对应的py或python3。不要通过创建一个名字相同但目标未知的alias掩盖问题。
3. can't open file
解释器已经启动,但脚本路径不存在。检查working directory、拼写、大小写和扩展名。用当前目录列表证明文件位置,或直接传入绝对路径。
4. SyntaxError
解释器找到了文件,但无法解析语法。traceback会指出文件和行号,caret通常指向检测到异常的位置,而根因可能在前一个未闭合引号或括号。修复一个最小错误后立即重跑。
↡根据错误发生在shell、path、parser还是runtime层,保留原始证据并验证最小修复的过程。# 保存为 environment_probe.py,证明编辑器和终端是否使用同一解释器。
from pathlib import Path
import sys
print(f"executable={sys.executable}")
print(f"version={sys.version.split()[0]}")
print(f"cwd={Path.cwd()}")
print(f"script={Path(__file__).resolve()}")把一次成功运行整理成最小证据包
一条“在我机器上能跑”的口头结论无法帮助下一次排错。最小证据包至少包含四项:原始启动命令、sys.executable与完整版本、源文件绝对路径、进程的exit code和stdout/stderr。它们共同回答“用什么、从哪里、运行哪个文件、结果是什么”。如果只保留截图,命令参数、路径和错误文本往往无法检索;如果只保留源代码,又无法证明实际执行的是哪份文件。
环境证据还要区分稳定信息与临时信息。Python版本、解释器路径和项目根目录应在同一学习阶段保持稳定;working directory可以随启动入口变化,因此代码若依赖相对路径,必须明确它相对的是进程cwd而不是脚本所在目录。后续第10章会用pathlib显式处理文件路径,这里先养成打印cwd和script path的习惯,避免把路径错误误判为文件内容错误。
阅读traceback时从最后一行取得异常类型和消息,再向上找到第一个属于自己项目的文件与行号;第三方库内部帧提供调用背景,但初学阶段通常不是第一处修改点。SyntaxError的caret表示parser发现无法继续的位置,未必就是根因字符;运行期NameError、TypeError则表示语法已经通过,程序执行到具体表达式才失败。这个时间顺序能迅速缩小检查范围。
修复完成后不要换一条更容易成功的命令。应保留相同解释器、相同working directory和相同脚本路径重跑原输入,再比较错误前后的exit code与输出;只有这样才能把“同时发生的其他变化”排除出因果链。若编辑器运行成功但终端仍失败,分别打印两端的executable和cwd,先解释差异,再决定统一解释器还是调整启动目录。
这份证据包也是后续章节的共同底座:安装pytest、Pygame或Django时,需要证明包安装到了同一interpreter;运行项目测试时,需要知道测试发现从哪个目录开始;部署Django时,也要区分本地editor配置与生产进程环境。第一章建立的不是一次Hello World,而是一套可持续复现的运行协议。
本章回顾:留下可重复的第一份证据
- Programming Environment由editor、terminal、Python interpreter、working directory和源文件共同组成。
- Windows、macOS和Linux的启动命令可不同,但都要确认Python version与executable路径。
hello_world.py依次经过保存、解释器选择、语法解析和执行,stdout是最后证据。- Troubleshooting先辨认失败层,再修复并用原命令回归。
- 完成本章时,应能从终端独立运行脚本,而不是只依赖编辑器按钮。
练习
问题 1:建立一份跨入口环境记录,证明 VS Code 和终端使用同一个解释器。
问题 2:终端报 can't open file 'hello_world.py',怎样证明问题不在 print 语句?
问题 3:设计一个最小故障实验,区分 SyntaxError 与运行期 NameError。
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- programming environment
- Python interpreter
- python command
- execution trace
- layered troubleshooting