谁被两边拉扯

场景:~/项目/requirements.txt 只有两行,每一行单独都装得上,两行一起装就报冲突。~/仓库/索引.txt 有每个版本的依赖。对照表列了八个包名。 任务:找出被两边拉扯的那个包(没有任何版本能同时满足所有约束的),到对照表里

开始练习 →

改约束让它们共存

场景:~/项目/requirements.txt 只有两行,两行一起装会冲突。 任务:改这两行的版本约束(放宽或换一个版本),让它们能在 ~/仓库 里一起装上——两个包都要保留在清单里,不能删行。改好之后运行 ~/check(它会用真的 p

开始练习 →

仓库里缺了谁

场景:~/项目/requirements.txt 只有一行,可是从 ~/仓库 装它会失败——它需要的某个包,仓库里一个版本都没有。对照表列了八个包名。 任务:找出仓库里缺的那个包,到对照表里查它对应的标记。 可操作范围:只在分给你的这台实验

开始练习 →

锁住的版本太旧

场景:~/项目/工具.py 调用了 httpkit.fetch_json;说明里写了这个函数是从哪个版本起才有的。~/项目/requirements.lock 是现在的锁文件,照它装出来跑会报 AttributeError。对照表列了八行「

开始练习 →

两台机器的锁差在哪

场景:~/锁A.txt 和 ~/锁B.txt 是两台机器各自 pip freeze 的结果。同一份代码在 A 上好的、在 B 上坏了。对照表列了八个包名。 任务:找出两份锁里「都有、但版本不一样」的那个包,到对照表里查它对应的标记。(只在

开始练习 →

同名文件遮住了包

场景:在 ~/项目 下跑 python3 工具.py,报的不是「找不到模块」而是 AttributeError——import 到的根本不是仓库里的那个包。对照表列了八个文件名。 任务:找出是哪个文件冒充了那个包,到对照表里查它对应的标记。

开始练习 →

把过期的锁重新生成

场景:~/项目/requirements.txt 改过了,~/项目/requirements.lock 还是改之前生成的——锁过期了。 任务:按现在的清单重新生成锁文件(在 venv 里从 ~/仓库 装一遍再 freeze,或者读索引自己推

开始练习 →

交付:一个解析器

场景:~/仓库/索引.txt 每行「包 版本 依赖…」。 任务:写一个 ~/项目/检查.py,用法 python3 检查.py 清单文件,不用 pip、只读索引,打印这份清单会装上什么:每个包一行「包名 空格 版本」,按包名排序,含间接依赖

开始练习 →

CI 是什么

一次改动,自动把检查一串跑一遍 build、test、lint 依次亮绿 持续集成(CI)最核心的一句话是:【0】。

开始练习 →

为什么要 CI

团队为什么要搭 CI?主要是为了【0】。

开始练习 →