跳转至

P2-7.1 本地环境(local environment)与运行时(runtime)

Section ID: P2-7.1 Version: 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
# 这是确认 Python 代码是否真正运行的最小输出例子。
print("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 代码必须在运行环境里,被解释器读取后,才会变成真正动作。

# 同一段 print 代码也可能因为运行环境不同而在不同位置执行。
print("hello")

但是,如果只是把这句话写在记事本里,什么事也不会发生。必须由 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 --version

上面这个命令,是在终端中执行的命令。它并不是原样写进 Python 代码文件里的句子。

相反,下面这个则是 Python 代码。

问题场景:和终端命令对照着,再次确认 Python 代码到底写在什么位置。 输入(input):一行输出字符串的 Python 代码。 期待输出(output):如果作为 Python 代码运行,就会输出 hello。 要确认的概念:即使看起来像句子,终端命令和 Python 代码也属于不同输入位置。

# 即使运行时环境改变,要执行的 Python 语句本身仍然相同。
print("hello")

这个区分非常重要。

这里也要按角色分开来读。

  • 终端命令:用来运行 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 官方文档也说明,虚拟环境通常建在 .venvvenv 这样的目录里,而且不会被放进源码管理系统。对任何项目来说,.venv 都是为了执行而准备的本地环境,不是正文文件,也不是代码本体。

最常见的命令长这样。

问题场景:先熟悉“创建按项目划分的执行空间”的命令到底长什么样。 输入(input):终端命令 python -m venv .venv。 期待输出(output):会创建一个叫 .venv 的虚拟环境目录。 要确认的概念:虚拟环境不是只有概念说明,它会直接连到真正创建按项目划分 Python 空间的命令。

python -m venv .venv

这个命令会创建一个叫 .venv 的虚拟环境目录。这里不去记按操作系统划分的激活命令。现在先只抓住它的意思:它在按项目创建执行空间。

虚拟环境创建与包安装,会在 P2-7.4 再次展开。这里先只看:为什么需要虚拟环境。

包(package)是拿来借用的代码集合

包(package) 是别人已经写好的代码集合。NumPy、Pandas、Matplotlib 这些工具都属于这里。

这里要按三层来读。

  • Python:语言本身和执行程序
  • 包:在 Python 里拿来借用的代码集合
  • pip:安装包的工具

例如,安装 NumPy 的命令和把它导入代码中,是不同的事。

python -m pip install numpy

问题场景:紧接着安装命令,立即确认安装位置和 Python 代码位置有何不同。 输入(input):一行把 NumPy 以 np 名字导入的 Python 代码。 期待输出(output):不会打印输出,但当前 Python 代码就可以开始使用 NumPy。 要确认的概念:包安装发生在终端,而 import 发生在 Python 代码里。

# 这里确认当前运行环境能否导入 NumPy。
import numpy as np

前者是在安装。后者是在 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。用于确认按项目创建虚拟环境、激活虚拟环境并安装包的流程。