KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

00 · 环境与 REPL:把学习工具先立起来 — keel 龙骨

语法书不教但每天都要用的事:解释器怎么跑、依赖怎么隔离、怎么用 REPL 做实验。这门课后面的每一章都假设你有一个随手可开的实验环境。

语法书不教但每天都要用的事:解释器怎么跑、依赖怎么隔离、怎么用 REPL 做实验。这门课后面的每一章都假设你有一个随手可开的实验环境。


一、三个运行入口

# 1. 交互式 REPL——学语言的第一工具
python
>>> 1 + 1
2
>>> exit()

# 2. 跑脚本
python hello.py

# 3. 跑模块(后面模块章细讲两者的区别)
python -m json.tool data.json

REPL 是这门课指定的练习方式:每一章的示例都设计成可以直接贴进 REPL 看 output。它比写脚本文件好在即时反馈——一行进去,结果立刻出来,错了立刻改。

REPL 两个高频技巧:

>>> help(dict.get)      # 查任意对象的文档
>>> dir("abc")          # 列出对象支持的所有方法

二、venv:项目依赖隔离

Python 的包默认装进全局解释器——两个项目一个要 requests 2.x 一个要 1.x 就死锁了。venv 给每个项目一个独立的解释器副本:

# 创建(在项目根目录)
python -m venv .venv

# 激活
.venv\Scripts\activate        # Windows
source .venv/bin/activate     # Linux/macOS

# 之后 pip 安装只进这个环境
pip install requests
pip freeze > requirements.txt   # 记录依赖清单

三条纪律:

  1. 每个项目一个 venv,永远不要往全局 pip 装包(污染系统,卸不干净);
  2. requirements.txt(或 pyproject.toml)入库,venv 目录本身不入库;
  3. 新机器恢复 = 建新 venv + pip install -r requirements.txt。

bigger 项目还会用 uv / poetry 管理依赖——工具会变,「每项目隔离 + 依赖清单可复现」这个原则不变。

三、脚本 vs 模块:__name__ 是什么

每个 Python 文件都有一个内置变量 __name__:

# tool.py
def main():
    print("干活")

if __name__ == "__main__":
    main()        # 只在直接运行时执行,被 import 时不执行

这就是「既是库又是脚本」的标准写法:import tool 时只拿到函数,python tool.py 时才跑入口逻辑。后面模块章会展开 import 的细节。

四、调试的第一课:print 之外的三板斧

  1. print(f"{value=}")——f-string 的调试语法,输出 value=123(名值一起);
  2. breakpoint()——标准库自带的断点,执行到这里进入 pdb 交互调试(n 下一步、p 变量 打印、q 退出);
  3. type(x) / isinstance(x, T)——搞不清对象是什么先问它。
def buggy(items):
    breakpoint()          # 停在这里,交互式检查 items
    return sum(items)

日志体系(logging)在真实项目里比 print 重要,但学习期 REPL + breakpoint 够用。

五、本章自检

  1. 为什么两个项目的依赖会冲突?venv 怎么解决?
  2. python tool.py 和 import tool 时,tool.py 里的 __name__ 分别是什么?
  3. breakpoint() 进入的交互环境里,哪三个命令最常用?

↓下一步:01 章 · 数据结构核心——从「会用」到「用对」。

进入 keel 阅读