Python 编程基础与工程实践(一):运行模型、版本与开发环境

Python 看起来很容易上手:安装解释器,写一句 print("Hello") 就能运行。但真正进入项目后,常见问题往往不是语法,而是“我运行的到底是哪一个 Python”“包装到哪里了”“Python 2 和 3 为什么不能混用”。

本文是系列起点,面向第一次系统学习 Python、或只写过零散脚本的读者。全文以 CPython 3.14 为验证基线(验证版本 3.14.7);Python 3.15 在本文写作时仍处于预发布阶段,不作为生产教程的基线。

1. Python、CPython 和解释器是什么关系

Python 首先是一门语言:它定义语法、对象模型和标准库接口。CPython 是 Python 官方维护、使用最广泛的实现,因主要以 C 编写而得名。除此之外还有 PyPy、Jython 等实现,它们可能采用不同的执行技术或面向不同平台。

日常说“安装 Python”,多数时候指安装 CPython。执行一个 .py 文件时,可以先用下面这个简化模型理解:

1
2
3
4
5
源代码(.py)
    ↓ 解析与编译
字节码(code object,可缓存为 .pyc)
    ↓ CPython 虚拟机执行
程序结果

“解释型语言”不等于逐字逐句直接执行源码。CPython 会先把源码编译为字节码,再由解释器执行;这些实现细节也不意味着 Python 代码永远不会经过即时编译或本地代码优化,其他实现可以采用不同策略。

可以在程序里确认当前解释器:

1
2
3
4
5
6
import platform
import sys

print(sys.version)
print(sys.executable)
print(platform.python_implementation())

其中 sys.executable 很重要:它告诉你当前进程实际使用哪个解释器,而不是你以为终端会找到哪个解释器。

2. Python 2 和 Python 3 是一次断代

Python 3.0 不是 Python 2 的普通小升级,而是有意清理历史设计的一次不兼容演进。Python 2.7 是 2.x 的最后一个版本,已于 2020 年 1 月 1 日停止官方支持;最终发行版 2.7.18 只是汇集停更前的修复,不代表支持期延长。

今天的新项目应直接使用 Python 3。阅读旧代码时,最容易遇到这些差异:

主题Python 2 典型行为Python 3 现代行为
输出print "hello" 是语句print("hello") 是函数调用
整数除法5 / 2 得到 25 / 2 得到 2.5,整除使用 5 // 2
文本模型str 默认是字节序列,另有 unicodestr 表示 Unicode 文本,bytes 表示字节
输入raw_input() 读取文本,input() 会求值input() 始终返回文本
序列工具range() 直接构造列表range() 返回惰性的范围对象
字典遍历dict.keys() 等通常返回列表返回动态视图对象
异常语法可见 except E, e 等旧写法使用 except E as e

真正棘手的通常是文本与字节边界。网络、文件和压缩数据是字节,用户看到的是文本;Python 3 强制程序明确进行编码和解码:

1
2
3
4
5
6
7
text = "半导体设备"
payload = text.encode("utf-8")
restored = payload.decode("utf-8")

assert isinstance(text, str)
assert isinstance(payload, bytes)
assert restored == text

不要为了兼容早已停更的 Python 2,在新项目中继续采用旧语法或“双版本兼容”技巧。确有遗留系统时,应把迁移作为独立工程:先建立测试,再借助静态扫描和分阶段替换处理 Unicode、依赖与行为差异。

3. 安装后先确认命令指向哪里

从 Python 官网安装当前稳定版后,先新开一个终端检查版本。Windows 通常可以使用:

1
2
3
python --version
python -c "import sys; print(sys.executable)"
Get-Command python

macOS 或 Linux 发行版经常把 Python 3 命名为 python3

1
2
3
python3 --version
python3 -c 'import sys; print(sys.executable)'
command -v python3

不同操作系统、安装方式和 PATH 配置可能产生不同命令名,文章后面统一写 python。如果你的环境只有 python3,请对应替换。不要通过删除系统自带解释器来“修复”命令冲突;先用上述发现命令确认路径,再调整用户级 PATH 或使用解释器绝对路径。

还要区分下面三个版本:

1
2
3
python --version
python -m pip --version
python -c "import sys; print(sys.prefix, sys.base_prefix, sep='\n')"
  • 第一条确认语言运行时版本;
  • 第二条同时显示 pip 版本及其安装位置,可判断它是否属于当前解释器;
  • 第三条用于观察当前环境与基础解释器的位置。

优先写 python -m pip,而不是裸用 pip。前者明确要求“由这个 Python 运行它所关联的 pip 模块”,多解释器并存时更不容易装错环境。

4. 用虚拟环境隔离每个项目

虚拟环境不是虚拟机,也不会复制完整操作系统。它在一个目录中记录基础解释器,并为项目提供独立的可执行入口和 site-packages。标准库模块 venv 足以创建它:

1
2
3
mkdir python-demo
cd python-demo
python -m venv .venv

在 Windows PowerShell 中可以激活:

1
2
.\.venv\Scripts\Activate.ps1
python --version

若本机策略不允许执行激活脚本,不必为了一个项目修改全局执行策略。激活本质上只是把虚拟环境目录提前放进 PATH,可以直接使用完整路径:

1
2
.\.venv\Scripts\python.exe -m pip --version
.\.venv\Scripts\python.exe app.py

在 Bash 中对应为:

1
2
3
python3 -m venv .venv
source .venv/bin/activate
python --version

激活后验证:

1
2
3
4
5
import sys

print(sys.prefix)
print(sys.base_prefix)
print(sys.prefix != sys.base_prefix)

输出 True 表示当前解释器运行在虚拟环境中。.venv/ 应加入版本控制忽略列表;虚拟环境被设计成可删除、可重建,也不应复制到另一台机器。

5. REPL、脚本和模块入口

直接运行 python 会进入交互式解释器(REPL),适合验证表达式:

1
2
3
4
>>> 5 / 2
2.5
>>> "py" * 3
'pypypy'

业务代码应保存为脚本。例如 app.py

1
2
3
4
5
6
def main() -> None:
    print("Hello, Python 3.14")


if __name__ == "__main__":
    main()

然后执行:

1
python app.py

当文件被直接执行时,模块名 __name__"__main__";当它被别的模块导入时,__name__ 是实际模块名。因此入口保护能避免“导入函数时顺便启动程序”。

对于包中的模块,更推荐从项目根目录通过模块名启动:

1
python -m my_app.cli

-m 会按导入系统定位模块,并正确建立包上下文;直接运行包内部某个文件,容易造成相对导入失败或产生两套不同的导入路径。

6. 一个可重复的最小工作流

第一次建立项目时,可以遵循下面的闭环:

1
2
3
4
mkdir temperature-converter
cd temperature-converter
python -m venv .venv
.\.venv\Scripts\python.exe -m pip --version

创建 converter.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def celsius_to_fahrenheit(celsius: float) -> float:
    return celsius * 9 / 5 + 32


def main() -> None:
    value = float(input("摄氏温度:"))
    print(f"华氏温度:{celsius_to_fahrenheit(value):.1f}")


if __name__ == "__main__":
    main()

先做语法编译检查,再运行:

1
2
.\.venv\Scripts\python.exe -m py_compile converter.py
.\.venv\Scripts\python.exe converter.py

py_compile 只能证明语法能够编译,不能证明业务逻辑正确。后续文章会逐步加入类型检查、自动化测试和项目配置,把“能运行”提升为“能维护”。

7. 小结

  • Python 是语言,CPython 是最常用的官方实现;本文系列锁定 CPython 3.14.7。
  • Python 2 已停止支持,Python 3 的文本模型、除法和标准库语义与它存在实质差异。
  • 遇到环境问题,先检查 sys.executablepython -m pip --version,不要凭命令名猜测。
  • 每个项目使用独立 .venv,并把环境视为可重建产物。
  • 脚本用入口保护,包内程序优先通过 python -m ... 启动。

下一篇将进入 Python 的核心:名称如何绑定对象、基础类型如何工作,以及控制流怎样组织程序。

参考资料

Licensed under CC BY-NC-SA 4.0
最后更新于 Wednesday, August 26, 2026