第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运行它、工作目录是什么、输入输出出现在哪里。先预测:同一文件在编辑器能运行、终端却报错时,代码本身是否一定有问题?

选择解释器:版本号只是第一份证据

分步1 / 3

选择操作系统并查看启动命令

在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)
分步1 / 3

逐步追踪执行链

从终端执行时,先进入文件所在目录,再运行系统对应的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,不能只截取最后一句。

Troubleshooting:按层定位而不是反复重装

分步1 / 3

选择一个可观察故障

1. syntax highlighting 不出现

先确认文件已保存为.py,VS Code右下角语言模式为Python,并已启用Python扩展。syntax highlighting只是编辑器识别文件的证据,不证明Python已经安装,也不证明当前代码可执行。

2. command not found

这条错误发生在解释器启动之前。检查官方安装是否完成、关闭并重开终端、尝试系统对应的pypython3。不要通过创建一个名字相同但目标未知的alias掩盖问题。

3. can't open file

解释器已经启动,但脚本路径不存在。检查working directory、拼写、大小写和扩展名。用当前目录列表证明文件位置,或直接传入绝对路径。

4. SyntaxError

解释器找到了文件,但无法解析语法。traceback会指出文件和行号,caret通常指向检测到异常的位置,而根因可能在前一个未闭合引号或括号。修复一个最小错误后立即重跑。

# 保存为 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发现无法继续的位置,未必就是根因字符;运行期NameErrorTypeError则表示语法已经通过,程序执行到具体表达式才失败。这个时间顺序能迅速缩小检查范围。

修复完成后不要换一条更容易成功的命令。应保留相同解释器、相同working directory和相同脚本路径重跑原输入,再比较错误前后的exit code与输出;只有这样才能把“同时发生的其他变化”排除出因果链。若编辑器运行成功但终端仍失败,分别打印两端的executable和cwd,先解释差异,再决定统一解释器还是调整启动目录。

这份证据包也是后续章节的共同底座:安装pytest、Pygame或Django时,需要证明包安装到了同一interpreter;运行项目测试时,需要知道测试发现从哪个目录开始;部署Django时,也要区分本地editor配置与生产进程环境。第一章建立的不是一次Hello World,而是一套可持续复现的运行协议。

本章回顾:留下可重复的第一份证据

  1. Programming Environment由editor、terminal、Python interpreter、working directory和源文件共同组成。
  2. Windows、macOS和Linux的启动命令可不同,但都要确认Python version与executable路径。
  3. hello_world.py依次经过保存、解释器选择、语法解析和执行,stdout是最后证据。
  4. Troubleshooting先辨认失败层,再修复并用原命令回归。
  5. 完成本章时,应能从终端独立运行脚本,而不是只依赖编辑器按钮。

练习

问题 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

资料与写作方式声明

本章以Python Crash Course, Third Edition, Chapter 1: Getting Started权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

原作版权归作者与出版社所有;本站原创教学结构与表述仅供学习交流。

讨论

评论区加载中…