后端依赖锁到测过的那一套:pyproject 卡版本范围,requirements.lock 写精确版本

langgraph 和四个 langchain 包原来完全不写版本,fastapi、sqlalchemy、aiosqlite 只有下限,
uv.lock 还在 .gitignore 里。按旧写法今天新装,22 个包和测过的版本不同,其中 sqlalchemy
会从 2.0.52 跳到 2.1.1。

1. pyproject.toml:LangGraph / LangChain 一族放行到下一个小版本——引擎依赖它们的断点
   格式、interrupt / resume、流式事件和 thinking 块,这些在小版本里也改过行为。aiosqlite
   与 SQLAlchemy 同样卡小版本:db/base.py 给 aiosqlite 0.22 的 stop() 打了补丁,连接池
   强制断开时会走到它。mcp 卡在大版本 1。
2. backend/requirements.lock:后端全部依赖(含间接依赖、全部 extras)的精确版本,
   --universal 跨平台。锁的是 473 条测试跑过的那个 conda 环境:本机要装的 96 个包逐一
   对上,另外 3 个只在 Windows / emscripten 上装。
3. environment.yml 装包时以锁文件为约束(-c),换机器装到的是同一套。
4. scripts/lock-deps.sh 重新生成锁文件:已锁的版本默认不动,升级用 --upgrade-package /
   --upgrade。README 补了用法,补装 extras 的命令都带上 -c。

验证:用同版本 Python 新建空环境,照 conda 的方式按 environment.yml 的 pip 行安装——
装到的 96 个包和测过的环境完全一致,473 passed。
This commit is contained in:
ThearchyHelios
2026-09-26 09:49:16 +08:00
parent e46a3f0d62
commit 95ff6470d1
5 changed files with 401 additions and 13 deletions
+23
View File
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
# 重新生成 backend/requirements.lock:后端全部依赖(含间接依赖、全部 extras)的精确版本。
#
# ./scripts/lock-deps.sh 加了依赖:只补新的,已锁的版本不动
# ./scripts/lock-deps.sh --upgrade-package langgraph 升一个包(连带它必须跟着动的)
# ./scripts/lock-deps.sh --upgrade 全部升到 pyproject 允许的最新
#
# 升级之后跑一遍 pytest 和前端检查再提交——锁文件的意义就是"这一套测过"。
# 锁是跨平台的(--universal),Linux / Windows 上装到的也是同一套版本。
# 需要 uv(brew install uv);装包慢可以在命令前加 UV_INDEX_URL=<镜像地址>。
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
command -v uv >/dev/null || { echo "缺少 uv:https://docs.astral.sh/uv/"; exit 1; }
cd "$ROOT/backend"
uv pip compile pyproject.toml \
--all-extras \
--universal \
--python-version 3.12 \
--custom-compile-command "./scripts/lock-deps.sh" \
-o requirements.lock \
"$@"