这一篇我们会明显下沉到"教学操作层",解决一个老师最现实的问题:
课我会讲,但作业 / 实验 / 项目一发就乱,怎么办?
这一篇的定位是:
EPGF 教学体系真正开始"可规模化复制"的关键一环。
【EPGF 白皮书】路径治理驱动的多版本 Python 架构------ Windows 环境治理与 AI 教学开发体系
EPGF 新手教程 22
教学模板不是压缩包:EPGF 如何设计"可复制、可检查、可回收"的课程模板?
一句话先给结论
如果你的教学模板只能"发下去",
却无法保证学生"按你设想的方式使用",
那它本质上只是一个普通文件夹。
EPGF 中的教学模板 ,不是为了方便分发,
而是为了实现三件事:
-
学生不乱用
-
老师可检查
-
课程可复用

一、为什么"发压缩包"是教学环境失控的开始?
我们先不谈 EPGF,先看现实。
传统教学模板的典型形态
lesson01.zip
├─ main.py
├─ requirements.txt
└─ README.txt
老师的预期是:
学生解压 → 装依赖 → 跑代码 → 写作业
但真实发生的是:
-
学生在任意路径解压
-
用系统 Python 跑
-
requirements.txt 被忽略
-
依赖装在全局环境
模板一发出,控制权立刻丢失。
教师为什么"越来越保守"?
因为老师发现:
-
要求越多,出错越多
-
约束越强,学生越混乱
最终只能退化为:
"能跑就行。"
二、EPGF 对教学模板的重新定义
在 EPGF 里,教学模板不是"内容集合",
而是一个最小可运行工程单元。
EPGF 教学模板的本质
模板 = 项目 = 可复现环境 + 结构规范 + 操作路径
这三者缺一不可。
三、EPGF 标准教学模板结构(推荐)
这是一套可以直接在文章中给读者照抄的结构。
lesson-02-linear-regression/
├─ .venv/ # 项目本地虚拟环境(学生创建)
├─ pyproject.toml # 依赖与工具声明
├─ uv.lock # 锁定版本(教师提供)
├─ src/
│ └─ main.py
├─ notebooks/
│ └─ demo.ipynb
├─ data/
│ └─ sample.csv
├─ README.md # 教学操作说明
└─ CHECKLIST.md # 学生自检清单(关键)
注意 :
.venv 目录不随模板下发 ,
但它在结构中是被明确预期存在的。
四、README.md 的教学写法(不是项目文档写法)
这是教学模板中最容易被写错的文件。
❌ 错误示例(工程师视角)
1. Create venv
2. Install dependencies
3. Run main.py
学生看完后:
"怎么创建?用哪个 Python?"
✅ 正确示例(EPGF 教学视角)
【第 1 步】
使用 PyCharm 打开本目录
【第 2 步】
在右下角选择解释器:
- 类型:Virtualenv
- 位置:.venv
- Python 来源:课程指定 Python
【第 3 步】
等待依赖自动安装完成
【第 4 步】
运行 src/main.py
重点:
-
每一步都是"可观察动作"
-
不依赖命令行
-
教师和学生看到的界面一致
五、CHECKLIST.md:教学模板的"控制器"
这是 EPGF 教学模板中最关键、但最容易被忽略的设计。
CHECKLIST 的作用只有一个
让学生知道:
自己是否在"正确的环境状态"中。
一个标准 CHECKLIST 示例
## 环境检查
- [ ] PyCharm 显示解释器路径为:.venv
- [ ] Python 版本为:3.10.x
- [ ] uv.lock 文件存在
- [ ] 运行 main.py 无报错
## 作业完成情况
- [ ] 完成 TODO-1
- [ ] 完成 TODO-2
教学效果:
-
学生先自检
-
老师少排错
-
助教有统一判断标准
六、模板如何"限制学生乱操作"?
EPGF 不靠禁止,
而是靠结构引导。
三个关键设计点
1️⃣ 虚拟环境固定在 .venv
-
学生不需要理解
-
但路径是唯一的
2️⃣ 所有运行入口明确
-
src/main.py
-
notebooks/demo.ipynb
学生不会"随便点文件跑"。
3️⃣ 工具链本地化(理念承接)
即使课程使用 uv / hatch:
-
教师环境可统一
-
学生项目内再次本地化
模板自包含,不依赖外部状态。
七、模板如何支持"作业回收与检查"?
这是教学模板设计的隐藏收益。
老师看到学生提交的项目时:
只需要检查:
-
.venv是否存在(或是否被 gitignore) -
pyproject.toml是否被修改 -
CHECKLIST 是否勾选完整
无需:
-
帮学生猜环境
-
重装依赖
-
手动修路径
八、本篇在 21--25 篇中的位置
-
第 21 篇:教学理念与问题本质
-
第 22 篇:教学模板设计规范(本篇)
-
第 23 篇:学生端一键复现流程
-
第 24 篇:机房 / 云桌面 / 批量部署
-
第 25 篇:教学子体系总架构图
从这一篇开始,
EPGF 教学体系已经具备"可复制"的工程条件。
写在最后
很多老师以为:
"教学模板就是把代码发给学生。"
但在 EPGF 里:
教学模板,是你对课堂控制力的延伸。
当模板本身具备结构、路径、环境与自检能力,
课堂才真正变得可控、可扩展、可交接。
EPGF 新手教程 00一次搭好、终身不乱:Windows Python 环境治理(EPGF)系列总览 / 阅读路线图
EPGF 新手教程 01为什么 EPGF 能在一台 Windows 上,搞定所有虚拟环境?------一次搭好,终身不乱的 Python 环境治理逻辑(新手也能看懂)
EPGF 新手教程 02第一次安装就不踩坑:Anaconda 正确安装与路径一次性治理------把 Python 安装在 D:\A,从此不再折腾环境变量
EPGF 新手教程 03不用重装、不用记命令在一台 Windows 上创建多个 Python 版本(全图形界面)
EPGF 新手教程 04一个项目一个环境:PyCharm 是如何帮你"自动隔离"的?(全 GUI,新手零命令)
EPGF 新手教程 05项目已经隔离了,为什么环境还是会乱?------被 90% 新手忽略的"工具污染",才是真正的隐形杀手
EPGF 新手教程 06一次安装,全局可用:为什么工具要"住进 Python 版本里"?
EPGF 新手教程 07所有"虚拟环境工具"到底是什么?------一次看懂 venv / virtualenv / conda / uv / poetry / hatch(不再混乱)
EPGF 新手教程 08一次装齐所有工具链,为什么必须跟着 Python 版本走?------工具本地化,才是 Windows 上永不混乱的终极解法(新手必读)
EPGF 新手教程 09|工具本地化:为什么项目必须自带工具链?------只有 .venv 真正"自给自足",环境才能迁移、复现、长期不乱(新手必读)
EPGF 新手教程 10|virtualenv:PyCharm 是如何创建第一个"真正自包含"的项目环境的?
EPGF 新手教程 11在 PyCharm(中文版 GUI)中创建 uv 环境,并把 uv 做到"项目自包含"(工具本地化为必做环节)
EPGF 新手教程 12在 PyCharm(中文版 GUI)中创建 Poetry 项目环境,并把 Poetry 做成"项目自包含"(工具本地化为必做环节)
EPGF 新手教程 13在 PyCharm(中文版 GUI)中创建 Hatch 项目环境,并把 Hatch 做成"项目自包含"(工具本地化为必做环节)
为什么 hatch 和 pipenv 在 PyCharm 里"行为异常"?------EPGF 架构下的工具真实定位与责任边界(认知纠偏篇)
EPGF 新手教程 14Pipenv 的默认行为与 Windows 环境治理冲突分析
EPGF 新手教程 15工具这么多,我该选哪个?------在 EPGF 架构下做出"不会后悔"的选择
EPGF 新手教程 16 构建工具本地化全景篇:为什么"装了≠属于项目"?
EPGF 新手教程 17 IDE 不是环境:PyCharm / VS Code 与真实 Python 运行时的边界澄清------EPGF 架构中的「执行责任」与「认知纠偏」篇
EPGF 新手教程 18 到底是谁在运行你的 Python 代码?------从 IDE 点击 Run 到字节码执行的完整链路拆解(EPGF 执行真相篇)
EPGF 新手教程 19 为什么 EPGF 必须「先建 .venv,再谈工具」?------项目级环境先行,是一切可迁移与可复现的工程前提
EPGF 新手教程 20一次打包带走:EPGF 项目如何实现「整目录迁移 + 原样复现」?
EPGF 新手教程 21把"环境折磨"从课堂中彻底移除:EPGF 如何重构 AI / Python 教学环境?