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 # 记录依赖清单
三条纪律:
- 每个项目一个 venv,永远不要往全局 pip 装包(污染系统,卸不干净);
requirements.txt(或pyproject.toml)入库,venv 目录本身不入库;- 新机器恢复 = 建新 venv +
pip install -r requirements.txt。
bigger 项目还会用 uv / poetry 管理依赖——工具会变,「每项目隔离 + 依赖清单可复现」这个原则不变。
三、脚本 vs 模块:__name__ 是什么
每个 Python 文件都有一个内置变量 __name__:
- 被python 直接运行时:
__name__ == "__main__"; - 被导入时:
__name__ == "模块名"。
# tool.py
def main():
print("干活")
if __name__ == "__main__":
main() # 只在直接运行时执行,被 import 时不执行
这就是「既是库又是脚本」的标准写法:import tool 时只拿到函数,python tool.py 时才跑入口逻辑。后面模块章会展开 import 的细节。
四、调试的第一课:print 之外的三板斧
print(f"{value=}")——f-string 的调试语法,输出value=123(名值一起);breakpoint()——标准库自带的断点,执行到这里进入 pdb 交互调试(n下一步、p 变量打印、q退出);type(x)/isinstance(x, T)——搞不清对象是什么先问它。
def buggy(items):
breakpoint() # 停在这里,交互式检查 items
return sum(items)
日志体系(logging)在真实项目里比 print 重要,但学习期 REPL + breakpoint 够用。
五、本章自检
- 为什么两个项目的依赖会冲突?venv 怎么解决?
python tool.py和import tool时,tool.py里的__name__分别是什么?breakpoint()进入的交互环境里,哪三个命令最常用?
↓下一步:01 章 · 数据结构核心——从「会用」到「用对」。