P2-7.1 本地环境(local environment)与运行时(runtime)¶
Section ID:
P2-7.1Version:v2026.07.20
在 P2-3.5 中,我们先区分了 Colab 和本地 PC。当时的目的,是为了让读者能立刻跟着做 NumPy 练习的预备说明。现在我们再往下一层。
到 P2-6 为止,我们读的是 到底在计算什么,比如公式、损失、最优化。但这些计算在现实里总是要在某个地方执行,也总要由某个程序来读取,读者才能真正看到结果。从这一节开始,我们不是暂停数学语言,而是进入另一个层次:去读那些把计算变成实际执行语句的环境。
如果把这个转折压缩到最短,可以写成下面这样。
| 刚才抓住的问题 | 现在新抓住的问题 | 为什么必须立刻接着读 |
|---|---|---|
| 怎么减少损失、怎么改数值? | 这些计算到底在什么地方、由什么程序来执行? | 因为后面的 NumPy、Pandas、Git 练习,都只能在真实的执行环境上确认。 |
这里解释的是 本地环境(local environment) 与 运行时(runtime) 这两个大区分。即使后面的章节继续出现 终端、解释器、虚拟环境、依赖 这些词,它们的大图景都要回连到这里的说明上。
这里不会一步步带着看 Python 安装界面,而是把重点放在:计算到底在什么地方执行、那个地方由谁管理。如果先把本地环境、运行时、Colab、本地 PC 的关系抓住,那么后面再看到终端、解释器、虚拟环境时,就不会把它们读成 是不是又要再学一个新工具,而会读成 是不是在把同一个执行位置分得更细
先从最小的执行场景开始看。下面这些例子的目标都是一样的。
hello 到底该输入到哪里,才会真正执行?
| 想看到什么 | 输入到哪里 | 例子 | 现在要确认的感觉 |
|---|---|---|---|
| 在 Colab 里执行一行 Python | Colab 代码单元 | print("hello") | 表面上它出现在浏览器里,但真正执行是由 Colab runtime 负责。 |
| 在本地 PC 上检查 Python 是否存在 | 终端 | python --version | 这不是 Python 代码,而是终端命令。 |
| 在本地 PC 上执行一行 Python | Python 解释器或 .py 文件 | print("hello") | 即使是同一段代码,也要等 Python 解释器来读,才会真的有输出。 |
| 在 Jupyter 笔记本里执行一行 Python | 笔记本代码单元 | print("hello") | 笔记本单元最终也运行在 Python 执行环境上。 |
问题场景:如果连同样的 hello 该放到哪里都混在一起,运行时说明就会显得抽象。 输入(input):一个终端命令和一行 Python 代码。 期待输出(output):在终端里会看到 Python 版本,在 Python 代码的位置会看到 hello。 要确认的概念:比起 写什么代码,我们更要先看到 放到哪里 是不同的。
这里必须立刻抓住的最小区分只有两个。
python --version是放进终端里的命令。print("hello")是放进 Python 解释器或笔记本单元里的 Python 代码。
换句话说,说“要区分运行时”,起点并不是什么宏大的安装理论,而是先知道一个事实:即使看起来像同一个画面,真正输入的位置也可能不同。
按问题类型先回看的位置¶
Chapter 7 与其一次性通读,不如在卡住时按问题类型回来查,会更高效。
| 现在卡住的问题 | 先回看哪一节 | 为什么那一节要先看 |
|---|---|---|
| 我总是把终端命令和 Python 代码混在一起 | P2-7.1, P2-7.3 | 因为必须重新分清执行位置和 Python 解释器的角色。 |
| 我搞不清当前文件夹和文件位置 | P2-7.2 | 因为必须先抓住工作文件夹的感觉,后面的命令才读得懂。 |
| 包安装和虚拟环境搅在一起 | P2-7.4, P2-7.5 | 因为安装位置和可复现性管理本来就是接在一起的。 |
| 按操作系统区分的终端窗口很陌生 | P2-7.6 | 因为在理解命令本身前,必须先熟悉窗口和输入位置。 |
| 我不知道现在是不是该安装 Python | P2-7.7 | 因为要先把“是否安装”的判断拆出来,才不至于被不必要的设置卡住。 |
教程里的 |、>、环境变量看不懂 | P2-7.8 | 因为必须先有最小的运行环境语法阅读感。 |
| 我想检查本地 Python 现在到底能不能正常运行 | P2-7.9 | 因为可以直接按安装后的检查步骤走一遍。 |
这个表的目的不是让人背下 Chapter 7,而是让读者能根据 现在卡住的种类 立刻找到最短的返回路径。
| 现在这一节先抓什么 | 紧接着下一步会问什么 | 以后会再次用在哪里 |
|---|---|---|
| 区分本地环境和运行时的大图景 | 在 P2-7.2 中继续看终端和工作文件夹怎样连到这个执行位置上。 | 会成为后面所有本地练习、包安装、错误排查的起点。 |
| Colab 和本地 PC 都是运行时,但管理方式不同 | 在 P2-7.3 与 P2-7.4 中继续看为什么解释器和虚拟环境要分开学。 | 以后会反复作为可复现性、团队协作、重跑示例的判断标准。 |
Chapter 7 讨论的不是 整个 Python,而是 执行位置 | 会变成读 Chapters 8~10 时不混角色的标准。 | 以后会在整理 Part 2 后半段的 NumPy、Pandas、Git 练习层次时再次使用。 |
这里的说明,都是以读者可能没有编程基础为前提。如果你已经熟悉终端、Python、虚拟环境,那么这里的内容会显得很熟悉;但这些词在后面的练习里会反复出现,所以仍然需要先整理一次。
这一节围绕下面四个问题来读。
- 代码到底在哪里执行?
- Python 到底执行什么?
- 本地环境和运行时有什么不同?
- 为什么会出现“虚拟环境”这个词?
| 术语 | 这一节先抓住的意思 |
|---|---|
| 本地环境(local environment) | 为了让代码在我的电脑上运行而准备好的程序、文件、设置的整体。 |
| 运行时(runtime) | 代码真正跑起来的地方,以及和那个地方连在一起的程序整体。 |
| Colab runtime | 虽然表面上在浏览器中使用,但真正的执行环境由外部服务管理。 |
| 本地 PC 执行 | 由用户自己直接管理 Python、文件夹和包状态的执行方式。 |
| 虚拟环境(virtual environment) | 在本地环境内部,再按项目更细地分出 Python 空间的装置。 |
这看起来像比 AI 数学更偏向实务的问题,但在机器学习练习中非常重要。因为同一段代码,一旦运行环境不同,结果可能不同,甚至可能根本无法运行。
也就是说,我们现在学这些词的理由很简单。后面当我们创建 NumPy 数组、读取 Pandas 数据、用 Git 拿到示例项目时,必须先能够把 为什么代码跑不起来 读成运行环境问题,而不是先当成数学问题。
在继续读 Part 2 的 Chapters 7~10 时,要先把下面这三层分开。
| 现在在读的层 | 核心问题 | 代表 Chapter |
|---|---|---|
| 运行环境 | 在哪里运行? | Chapter 7 |
| 代码语法和数据结构 | 要把什么写成什么句子、什么值和什么集合? | Chapters 8-9 |
| 笔记本记录 | 执行结果怎样留下、怎样重跑? | Chapter 10 |
这个表最关键的一点是:终端、Python 语法、笔记本虽然都可能挂在 学 Python 这个名字下面,但它们不是同一个角色。Chapter 7 先区分的,就是其中的 执行位置与管理主体。
如果按 Part 2 Chapters 7~10 再把这个流向压短一点,就是下面这样。
| 现在在读的块 | 先抓住的问题 | 紧接着会被具体化的内容 |
|---|---|---|
| Chapter 7 运行环境 | 在哪里运行? | 终端、解释器、虚拟环境 |
| Chapters 8-9 代码语法和数据结构 | 用什么句子写什么值和集合? | 值、变量、列表、字典、数据结构感觉 |
| Chapter 10 笔记本记录 | 怎样留下并重新运行结果? | Jupyter、Colab、本地执行、可复现习惯 |
如果把这个转折和前后章节一起连起来,就可以整理成下面这样。
| 前一章 | 现在这一章 | 紧接着继续补上的章 |
|---|---|---|
| 公式与计算:要算什么? | 运行环境:这些计算到底在哪、由什么程序来执行? | Python 语法:这些计算要用什么句子写出来? |
| 计算语言 | 执行位置与管理主体 | 代码句子 |
也就是说,这一章的核心,是把抓手从 算什么 换成 这些计算到底在哪儿运行。
核心判断标准:本地环境(local environment)与运行时(runtime)¶
- 能把
本地环境(local environment)解释成代码在我电脑上运行的条件。 - 能把
运行时(runtime)解释成代码真正执行的位置。 - 能说明为什么终端、Python 解释器、虚拟环境会按这个顺序出现。
- 能说明 Colab 和本地 PC 都是运行环境,但管理方式不同。
三个判断标准¶
这里先区分的不是安装步骤本身,而是代码运行的地方。下面三个标准,会成为后面安装、终端、虚拟环境说明的共同底座。
| 标准 | 为什么重要 | 这里需要的理解层次 |
|---|---|---|
| 代码总得在某个地方运行 | 因为必须把“文件里写了字”与“真的执行了”分开。 | 理解不是把代码写出来就结束,还需要运行它的程序和位置。 |
| Python 解释器是读取并执行 Python 代码的程序 | 因为终端、脚本、笔记本执行会被串成同一条线。 | 能用这个区分说明 print("hello") 到底是谁在读。 |
| Colab 和本地 PC 都是运行时,但管理者不同 | 因为它会连到后面为什么还要讲虚拟环境和依赖。 | 理解 Colab 更由服务管理,而本地环境更多由用户自己管理。 |
为什么 Python 会反复出现¶
学 AI 时,Python 会反复出现。这时很自然会问,为什么偏偏是 Python?
Python 在 1980 年代末由 Guido van Rossum 开始设计,并在 1991 年公开。Python 官方 FAQ 说明,Python 受到了 ABC 语言经验的影响,也是在一个背景下诞生的:仅靠 C 程序或 shell 脚本,很难处理系统管理工作,因此需要一种更可扩展的脚本语言。
这段历史里真正重要的是:Python 从一开始就是一种既适合人阅读和书写的高级语言,同时又能连到真实系统工作的执行工具。
所以 Python 很适合学习、自动化、数据处理与实验代码。Python 官方 FAQ 也说明,Python 语法清晰、标准库大、又有交互式解释器,因此也适合作为第一门语言。
AI 领域里为什么经常看到 Python,也和这条脉络连在一起。
- 把公式翻成代码比较容易。
- 可以快速跑小实验。
- NumPy、Pandas、Matplotlib 这类工具很多。
- 机器学习和深度学习库大多聚集在 Python 生态里。
当然,这并不意味着 Python 是唯一语言。真实服务内部,也常常会和 C++、Java、JavaScript、Go、Rust 等语言一起使用。但在 AI 学习和实验的入口,遇到 Python 的可能性很高。所以这一章不是先讲安装,而是先抓住 Python 代码到底在哪里、怎样执行。
先想“代码运行的地方”¶
刚开始编程时,最先看到的是“写代码”这件事。但代码不是只靠文字就会动。它需要有程序来读取,也需要有地方来执行。
这里要先区分三个词。
- 代码(code):人写出来的命令
- 执行(execution):计算机去处理这个命令
- 运行环境(runtime):执行所需的程序、设置、包和文件都准备好的位置
例如,下面这段就是 Python 代码。
问题场景:通过最小的例子看清“把文字写下来”和“真的执行起来”是两回事。 输入(input):一行会输出字符串的 Python 代码。 期待输出(output):只要 Python 解释器来读,就会打印出 hello。 要确认的概念:Python 代码必须在运行环境里,被解释器读取后,才会变成真正动作。
但是,如果只是把这句话写在记事本里,什么事也不会发生。必须由 Python 解释器(Python interpreter) 来读取并执行它。
Python 解释器是读取并执行代码的程序¶
Python 解释器(Python interpreter) 是读取并执行 Python 代码的程序。官方 Python 文档说明,Python 解释器可以从命令行调用,而在 交互模式(interactive mode) 中,可以在 >>> 提示符下输入命令。
这里把 Python 代码和 Python 解释器这样区分。
- Python 代码:人写出来的命令
- Python 解释器:读取并执行这个命令的程序
运行 Python 有好几种方式。
| 方式 | 例子 | 入门解释 |
|---|---|---|
| 交互式执行 | 先运行 python,然后在 >>> 输入 | 一行一行立即确认 |
| 脚本执行 | python example.py | 一次执行文件里写好的整段代码 |
| 笔记本执行 | Colab / Jupyter 代码单元 | 按单元查看代码和结果 |
这三种方式很容易看起来混在一起。真正重要的是它们都有同一个共通点:Python 代码都是由 Python 解释器来执行。
Python 解释器与脚本执行,会在 P2-7.3 再次展开。这里先只记住大图景:Python 代码是由 Python 解释器执行的。
终端是给计算机发送命令的窗口¶
终端(terminal) 是把命令输入给计算机的窗口。macOS 的 Terminal、Windows Terminal、PowerShell、Linux shell 都属于这里。
终端命令和 Python 代码是不同的。
上面这个命令,是在终端中执行的命令。它并不是原样写进 Python 代码文件里的句子。
相反,下面这个则是 Python 代码。
问题场景:和终端命令对照着,再次确认 Python 代码到底写在什么位置。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):如果作为 Python 代码运行,就会输出 hello。 要确认的概念:即使看起来像句子,终端命令和 Python 代码也属于不同输入位置。
这个区分非常重要。
这里也要按角色分开来读。
- 终端命令:用来运行 Python、安装包、执行文件
- Python 代码:由 Python 解释器读取的代码
最常见的混淆点如下。
| 句子 | 用在什么地方 |
|---|---|
python example.py | 终端 |
python -m pip install numpy | 终端 |
%pip install numpy | Colab / Jupyter 代码单元 |
import numpy as np | Python 代码 |
print("hello") | Python 代码 |
我们在这里重新确认 P2-3.5 里的区分,是有原因的。如果不知道执行位置,错误一出现时就很难判断到底该改什么。
终端、shell、工作文件夹(working directory)会在 P2-7.2 单独处理。这里先只抓住一点:终端命令和 Python 代码不是同一种句子。
本地环境是我电脑上的执行条件¶
本地环境(local environment) 指的是代码在我电脑内部运行所依赖的条件。其中可能包括操作系统、Python 安装位置、包安装状态、当前工作文件夹、环境变量等。
在这里,我们把本地环境读成 我的电脑上,Python 代码得以运行的条件。
即使是同一份代码,不同电脑上的结果也可能不同。
例如,不同电脑的条件可能这样不同。
- 我的电脑上已经安装了 NumPy,但别人的电脑上可能没有。
- 我的电脑使用 Python 3.12,别人的电脑可能是 Python 3.10。
- 在我的电脑上文件路径是对的,但在另一台电脑上文件位置可能不同。
所以,在练习文档里,和“代码”同样重要的,是 到底在哪里执行。
运行时是代码真正跑起来的位置¶
运行时(runtime) 就是代码真正执行的地方。如果在本地 PC 上运行,那么我的电脑就是运行时。如果在 Colab 上运行,那么由 Google 提供的笔记本 runtime 就是运行时。
| 执行方式 | 运行时 |
|---|---|
| 执行 Colab 代码单元 | Colab runtime |
| 在自己电脑终端里运行 | 本地 Python 环境 |
| 开启虚拟环境后运行 | 那个虚拟环境里的 Python 和包 |
Colab 很方便。它不需要安装 Python,就能在浏览器里运行。但 runtime 可能会断开、文件可能会消失、服务策略也可能变化。
本地 PC 一开始设置起来比较麻烦。但项目文件、包版本、运行方式都可以由自己直接管理。
总结起来就是下面这样。
- Colab:容易开始,运行时由外部服务管理。
- 本地 PC:需要先设置,但运行时由我自己管理。
虚拟环境是按项目划分的执行空间¶
虚拟环境(virtual environment) 是一种装置,能为每个 Python 项目创建各自独立的执行空间。Python 官方文档说明,venv 能创建轻量级虚拟环境,而每个虚拟环境都可以拥有独立的 Python 包集合。
你可以把虚拟环境理解成 按项目划分的 Python 执行空间。
为什么需要它?项目 A 可能需要 numpy 1.x,而项目 B 可能需要 numpy 2.x。如果把两者全都混装到同一台电脑里,就可能冲突,所以要把空间按项目分开。
虚拟环境本身并不是项目代码。Python 官方文档也说明,虚拟环境通常建在 .venv 或 venv 这样的目录里,而且不会被放进源码管理系统。对任何项目来说,.venv 都是为了执行而准备的本地环境,不是正文文件,也不是代码本体。
最常见的命令长这样。
问题场景:先熟悉“创建按项目划分的执行空间”的命令到底长什么样。 输入(input):终端命令 python -m venv .venv。 期待输出(output):会创建一个叫 .venv 的虚拟环境目录。 要确认的概念:虚拟环境不是只有概念说明,它会直接连到真正创建按项目划分 Python 空间的命令。
这个命令会创建一个叫 .venv 的虚拟环境目录。这里不去记按操作系统划分的激活命令。现在先只抓住它的意思:它在按项目创建执行空间。
虚拟环境创建与包安装,会在 P2-7.4 再次展开。这里先只看:为什么需要虚拟环境。
包(package)是拿来借用的代码集合¶
包(package) 是别人已经写好的代码集合。NumPy、Pandas、Matplotlib 这些工具都属于这里。
这里要按三层来读。
- Python:语言本身和执行程序
- 包:在 Python 里拿来借用的代码集合
pip:安装包的工具
例如,安装 NumPy 的命令和把它导入代码中,是不同的事。
问题场景:紧接着安装命令,立即确认安装位置和 Python 代码位置有何不同。 输入(input):一行把 NumPy 以 np 名字导入的 Python 代码。 期待输出(output):不会打印输出,但当前 Python 代码就可以开始使用 NumPy。 要确认的概念:包安装发生在终端,而 import 发生在 Python 代码里。
前者是在安装。后者是在 Python 代码里把它加载进来准备使用。
包、依赖、可复现性,会在 P2-7.4 与 P2-7.5 更详细地说明。这里先留下一个最小区分:安装和使用是两件不同的事。
如果你不会编程,最先该区分什么¶
比起死记很多语法,先把区分抓住更重要。
| 问题 | 先区分什么 |
|---|---|
| 这句话到底输入到哪里? | 终端、代码单元,还是 Python 文件 |
| 这段代码到底由谁执行? | Python 解释器,还是 shell |
| 报错说缺包了吗? | 是安装问题,还是 import 问题 |
| 我的电脑和 Colab 结果不一样吗? | 是运行时不同吗? |
| 示例在别人的电脑上跑不通吗? | 是虚拟环境和包版本不同吗? |
这不是机器学习本身的概念。但在学习机器学习的过程中,它会反复绊住人。所以要先在这一章里整理。
用案例来看¶
案例 1. 同样的示例文件,在 Colab 里能跑,在自己电脑上却不行¶
假设一个学习者在 Colab 里运行书上的示例,一切都正常;但把同一个文件下载到本地 PC 后,再运行就报错了。人们通常会先怀疑:是不是代码写错了?、是不是下载坏了?
但在这种情况下,比起语法,更应该先区分执行位置。因为在 Colab 里,代码可能已经在一个准备好的 runtime 和包环境里运行;而在本地 PC 上,则必须由自己确认 Python 解释器、工作文件夹、包安装状态。
这一节强调的 本地环境、运行时、解释器、虚拟环境,正是为了把这种失败拆开来读的语言。也就是说,只要先区分 在哪里执行、是谁执行、需要的包是否存在于那个位置,问题就能更快缩小。
可以确认的结果其实很简单。如果在 Colab 里 import numpy as np 立刻成功,但在本地 PC 上却报 ModuleNotFoundError,那么结论就是:在看代码内容之前,应该先检查本地运行环境里的包准备状态。
检查清单¶
- 能把
本地环境(local environment)解释成代码在我电脑上运行的条件。 - 能把
运行时(runtime)解释成代码真正执行的地方。 - 能区分终端命令和 Python 代码。
- 能把 Python 解释器解释成读取并执行 Python 代码的程序。
- 能把虚拟环境解释到“按项目划分的执行空间”这个程度。
- 能用入门层次说明包安装和
import是两件不同的事。 - 能说明 Colab 和本地 PC 都是运行时,但管理方式不同。
- 能先检查
在哪里运行、由什么执行、需要什么包、那个包安装在哪里。
来源与参考资料¶
- Python Software Foundation, Using the Python Interpreter, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于支撑如何调用 Python 解释器,以及如何区分交互式输入与脚本执行。
- Python Software Foundation, General Python FAQ, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于确认 Python 是解释型、交互式编程语言,并可在多种操作系统上使用的基础说明。
- Python Software Foundation, venv — Creation of virtual environments, Python 3.14.6 documentation, 确认日期: 2026-07-20。用于确认虚拟环境会在隔离目录中拥有自己的 Python 安装与包状态。
- Python Packaging Authority, Install packages in a virtual environment using pip and venv, Python Packaging User Guide, 确认日期: 2026-07-20。用于确认按项目创建虚拟环境、激活虚拟环境并安装包的流程。