P2-7.3 Python 解释器(interpreter)与脚本(script)¶
Section ID:
P2-7.3Version:v2026.07.20
在 P2-7.2 中,我们已经看了终端(terminal)、shell、工作文件夹(working directory)。现在要继续看:在那个终端里,Python 代码到底怎样被执行。
最容易混淆的地方,是下面这三行。
这三行都和 Python 有关,但它们不是同一种句子。有的是终端命令,有的是 Python 代码。这里要把这个边界明确抓住。
这里解释的是 Python 解释器(interpreter)、脚本(script)、交互模式(interactive mode) 的区分。即使后面再次遇到 python -m pip ... 这种命令,或者笔记本执行,也都要回连到这里:Python 到底是在什么位置、用什么方式读取代码。
这里不是要学习 Python 语法本身,而是要区分 Python 代码到底是在什么位置、通过什么方式执行。如果先抓住解释器、交互执行、脚本执行之间的差别,那么后面再看到虚拟环境、包安装、数据文件执行时,就能先分清:到底是命令写错了,还是 执行位置搞错了。
| 现在这一节先抓什么 | 紧接着下一步会问什么 | 以后会再次用在哪里 |
|---|---|---|
| 交互执行和脚本执行的差别 | 会在 P2-7.4 中继续连到虚拟环境和包安装命令。 | 以后所有 Python 练习里,区分执行方式和文件结构时都会再次使用。 |
| 不要把终端命令和 Python 代码混在一起的标准 | P2-7.5 以后会继续接到数据文件和库使用。 | 会成为解释 Colab 和本地环境差异的基础。 |
python、python file.py、python -m ... 的位置区分 | 会在 P2-7.6 与 P2-7.7 中用按操作系统区分的安装和执行步骤进一步补强。 | 会在包安装、模块执行、项目脚本执行中反复出现。 |
| 术语 | 这一节先抓住的意思 |
|---|---|
| Python 解释器(interpreter) | 读取并执行 Python 代码的程序。 |
| 交互模式(interactive mode) | 一行一行输入并立刻确认结果的执行方式。 |
| 脚本(script) | 把多行代码保存到文件里,再一次执行的方式。 |
| 提示符(prompt) | 显示“现在可以在这里输入”的标记。 |
python -m ... | 请求 Python 去执行某个特定模块的方式。 |
核心判断标准:Python 解释器(interpreter)与脚本(script)¶
- 能把
Python 解释器(interpreter)解释成读取并执行 Python 代码的程序。 - 能说明
交互模式(interactive mode)和脚本(script)执行的差别。 - 能区分终端命令和 Python 代码。
- 能用入门层次说明 Colab/Jupyter 代码单元执行与终端执行有何不同。
- 能说明即使是同样的代码,只要执行方式变了,保存、重跑、共享的方式也会跟着变。
三个判断标准¶
| 标准 | 为什么重要 | 这里需要的理解层次 |
|---|---|---|
| 解释器是读取并执行 Python 代码的程序 | 只有把代码和执行程序区分开,才能真正看出执行方式的差异。 | 只要能用一句话说明解释器的角色就足够。 |
| 脚本执行和交互执行的执行单位不同 | 因为保存、重跑、共享的方式不同。 | 能区分文件单位执行和一行单位执行。 |
| 终端命令和 Python 代码输入的位置不同 | 即使都像“和 Python 有关的句子”,解释它们的主体也不同。 | 抓住 shell 提示符和 Python 提示符需要区分的感觉。 |
为什么解释器和脚本会一起出现¶
如果只把 Python 理解成“只能运行保存在文件里的程序的语言”,其实很难真正理解它。Python 官方 FAQ 把 Python 解释为一种 interpreted、interactive、object-oriented 的编程语言。它也说明,Guido van Rossum 是在实现 ABC 语言以及参与 Amoeba 分布式操作系统工作时,开始构想 Python 的;而在只靠 C 程序或 Bourne shell script 很难处理系统管理工作的背景下,需要一种更可扩展的脚本语言。
如果把这段背景压缩成入门者能抓住的程度,就是下面这样。
- shell script:适合把操作系统命令串起来做自动化。
- 像 C 这样的编译型语言:又快又强,但对小型自动化和小实验来说可能太重。
- Python:同时提供可读的高级语法、交互执行和脚本执行。
所以,在 Python 里自然会同时看到两种使用方式。
- 交互执行:立刻测试一个小表达式。
- 脚本执行:把多行工作保存成文件,然后反复执行。
AI 学习里为什么会经常遇到 Python,也和这里有关。因为用一点点小代码就能立刻试公式,而当实验稍微长起来,又能很方便地留成文件或笔记本。不过这里不会深入展开 Python 语言史,只保留一种感觉:为什么解释器和脚本这两种执行方式会同时出现。
解释器是读取并执行代码的程序¶
Python 解释器(interpreter) 是读取并执行 Python 代码的程序。Python 官方文档说明,解释器可以从命令行(command line)调用;如果启动时没有提供文件名或标准输入,它就会进入 交互模式(interactive mode)。
这里先这样理解。
- Python 代码:人写出来的命令。
- Python 解释器:读取并执行 Python 代码的程序。
下面这段就是 Python 代码。
问题场景:确认最简单、会被 Python 解释器读取的代码长什么样。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):执行后会打印 hello。 要确认的概念:解释器就是读取并执行这种 Python 语句的程序。
这段代码不是只靠文字就会动。它必须被 Python 解释器读取后才会执行。
交互模式是一行一行确认的方式¶
如果你在终端里运行 Python,就可以使用 交互模式(interactive mode)。
根据环境不同,命令名也可能是 python3。
进入交互模式后,通常会看到 >>> 提示符。Python 官方文档也说明,交互模式里的默认提示符就是 >>>。
问题场景:看交互模式里怎样立刻确认一行计算和一行输出。 输入(input):1 + 2 这个计算和 print("hello") 这个调用。 期待输出(output):会立刻打印 3 和 hello。 要确认的概念:交互模式是一种按一行一行去测试计算的执行方式。
交互模式特别适合立即确认计算。
交互模式尤其适合下面这些情况。
- 检查一个很短的计算。
- 试试看某段语法。
- 立刻打印一个小值。
但在交互模式里输入的内容,通常不会作为文件保留下来。下次要再运行,还得再打一次。所以当多行代码需要反复执行时,我们会使用 脚本(script) 文件。
脚本是保存在文件里的执行单位¶
脚本(script) 是把要执行的代码保存在文件里的形式。Python 文件通常使用 .py 扩展名。
例如,假设我们把下面这些内容保存到一个叫 hello.py 的文件中。
问题场景:看把多行 Python 代码保存成文件、然后当作脚本执行的形态。 输入(input):hello.py 里的两行 Python 代码。 期待输出(output):执行后会按顺序打印 hello 和 1 + 2 的结果。 要确认的概念:脚本就是把 Python 代码按文件单位保存下来,再反复执行的方式。
如果终端当前就在同一个文件夹里,就可以这样运行。
根据环境不同,也可能使用下面这个命令。
脚本执行和交互执行是不同的。
| 执行方式 | 输入位置 | 优点 | 需要注意的点 |
|---|---|---|---|
| 交互执行 | >>> 提示符 | 适合立即确认一行 | 输入内容可能不会保留成文件 |
| 脚本执行 | .py 文件 | 容易保存、修改、重跑、共享 | 必须确认当前工作文件夹和文件路径 |
在 AI 学习里,有时需要立刻检查一个小计算,有时又需要把同一段代码反复修改后再执行。所以两种方式都会遇到。
不要把终端命令和 Python 代码混在一起¶
最常见的混淆点就是这个。
这是一个终端命令。它不是写在 Python 代码文件里的句子。
相反,下面这个则是 Python 代码。
问题场景:再次确认即使是同样的 print("hello"),它也只能在 Python 执行位置使用,而不能当成 shell 提示符里的普通命令。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):如果作为 Python 代码执行,就会打印 hello。 要确认的概念:终端命令和 Python 代码,不能按句子外观区分,而要按输入位置区分。
这句不是直接输入到终端里的命令。当然,在 Python 的交互式 >>> 提示符里,它可以被输入。但在普通 shell 提示符里,它不会被当作 Python 代码,而会被当作 shell 命令来解释。
所以,这里很重要的是养成区分提示符的习惯。
- 像
$或%这样的 shell 提示符:输入终端命令。 >>>这样的 Python 提示符:输入 Python 代码。- Colab/Jupyter 代码单元:默认输入 Python 代码。
代码单元位于脚本执行和交互执行之间¶
Colab 或 Jupyter 的 代码单元(code cell),会按单元来执行 Python 代码。
问题场景:再次确认在笔记本代码单元里执行最小 Python 代码时,会发生什么。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):在单元执行结果里打印出 hello。 要确认的概念:代码单元既像交互执行那样能立刻看到结果,又会把记录保存在笔记本里。
代码单元像交互执行一样,适合立即确认结果。同时,它又能把代码、结果和说明一起保留在笔记本文件中,所以很适合学习。
但代码单元也和脚本文件不同。只要单元执行顺序改变,结果就可能改变;前一个单元里创建的变量,也可能会被后一个单元拿来使用。
如果把三种执行位置再分开,就是下面这样。
- 交互模式:快速确认一行一行。
- 脚本文件:把整个文件保存下来并反复运行。
- 笔记本代码单元:边保留说明和结果,边按单元执行。
以后当练习变长时,就会出现这样的情况:在笔记本里能跑,但搬到脚本里就不行了。 那时就要把单元执行顺序、文件路径、必要的 import、包安装状态分开检查。
python -m 是执行模块的一种方式¶
在终端里,你会经常看到下面这样的命令。
这里的 -m,是一种请求 Python 去把某个 模块(module) 当作脚本执行的方式。Python 官方文档说明,python -m module 这种形式会把一个库模块当作脚本运行。
这里先这样理解。
python hello.py:运行一个文件。python -m pip ...:通过 Python 去运行名为pip的模块。
pip 和包安装会在 P2-7.4 再讲。这里先记住一点:-m 不是 Python 代码语法,而是从终端传给 Python 解释器的执行选项。
执行方式一变,要检查的东西也会跟着变¶
即使是同样的 Python 代码,只要执行方式不同,先检查的点也会不同。
| 情况 | 先检查什么 |
|---|---|
| 在交互模式里不工作 | 我现在是不是在 >>> 提示符里? |
| 脚本文件打不开 | 当前工作文件夹里有这个文件吗? |
找不到 python 命令 | Python 装了吗,命令名对吗? |
| 在 Colab 里能跑,本地不行 | 本地是不是也有同样的文件和包? |
| 搬到脚本里就不行 | 有没有依赖过笔记本单元执行顺序留下来的值? |
这里不会把所有错误解决方法都讲完。重要的是一种视角:只要执行方式不同,收窄错误原因的方法也必须不同。
用案例来看¶
案例 1. print("hello") 到底该输入在哪里¶
假设一个刚开始学 Python 的人跟着教程走,把 print("hello") 直接输入到了终端里。在某些环境里,它看起来好像能工作;在另一些环境里,它却报“找不到命令”,让人很慌。
人最开始用的标准通常很像:既然这句跟 Python 有关,那大概随便放哪里都可以。 但现实里,shell 提示符、Python 交互提示符、Colab 代码单元,各自输入的是不同的语言。
这也就是为什么这一节要把 解释器、交互模式、脚本、代码单元 分开。即使它们看起来像在做同一件事,python hello.py 是终端命令,print("hello") 是 Python 代码,而错误原因会因为“输入在什么位置”而不同。
可确认的结果会直接体现在提示符上。如果 print("hello") 在 >>> 里能运行,但在普通 shell 提示符里不能,那么问题就不是 Python 语法,而是你选错了执行位置。
检查清单¶
- 能把 Python 解释器(interpreter)解释成读取并执行 Python 代码的程序。
- 能说明在交互模式(interactive mode)里,Python 代码是输入在
>>>提示符里的。 - 能说明脚本(script)是保存在
.py文件里的执行单位。 - 能区分
python hello.py是终端命令,而print("hello")是 Python 代码。 - 能说明 Colab/Jupyter 代码单元会按单元执行 Python 代码。
- 能说明
python -m pip ...里的-m是终端传给 Python 解释器的执行选项。 - 能说明运行 Python 时,先要区分当前位置是 shell、Python 提示符还是代码单元,以及自己要执行的是一行、一份文件还是一个笔记本单元。
来源与参考资料¶
- Python Software Foundation, General Python FAQ, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于支撑 Python 是解释型、交互式编程语言这一说明,并确认 Guido van Rossum 的早期开发背景。
- Python Software Foundation, Using the Python Interpreter, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于确认解释器调用、交互模式与脚本文件执行之间的区别。
- Python Software Foundation, Command line and environment, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于确认
python script.py、python -c、python -m module-name等命令行执行方式。