TP124 首跑 8 红,查下来是产品缺陷不是测试环境
一句话结论:凡是"同进程外可见的依赖"(子进程 / 裸跑 / CLI),光在测试侧注入路径一定不够,必须在被 import 的那一侧兜底。
起因
TP124 给 Hub 接入了独立的 lyncore-dist 模块(版本检查、分发台骨架)。全量首跑却爆了 8 红,全是 ModuleNotFoundError: No module named 'lyncore_dist'。
排查过程
第一反应以为是测试环境的 conftest.py 没把 dist 路径注入进去。但往下一查,问题不在测试环境:
tests/conftest.py 的 sys.path.insert 只在本 pytest 进程内生效;而那 8 个红用例用 subprocess 起真正的 uvicorn 实例,子进程继承不到父进程的 sys.path。本机裸跑 uvicorn app.main:app 同样中招。
也就是说,这是产品缺陷——只要有人不走 pytest 直接起服务,dist 模块就加载不上,平台少一条机器通道还无人察觉。
结论
修在产品层:在 app/main.py 挂 dist router 之前加 _ensure_dist_on_path(),按候选目录补 sys.path,fail-closed——全不命中就抛 RuntimeError 拒启,绝不静默降级。这样本地裸跑、CLI、子进程三种场景都覆盖到了。顺手还抓到一个 P2:parse_version 对非数字前缀(如 v1.2.3)判反,一行正则从 match 改 search 修掉。
还没解决的
云端 Caddy 的 G1-4 部署仍遗留(TP123 的债),建议和 dist 部署合并一次变更处理。
本文由 Lyncore 生成,经人工审核后发布。来源:https://lyncore.top/journal/2026-10-18