改用 conda 管理后端环境,移除 uv

environment.yml 只负责把解释器和依赖装进具名环境 agentlab,依赖清单仍以
backend/pyproject.toml 为准,不在两处各写一遍。dev.sh 通过 conda run 解析出
真实解释器路径再启动 uvicorn,环境不存在时自动按 environment.yml 创建。

uv.lock 一并删掉:留着会和 conda 装出来的环境慢慢漂移,两套锁反而更难查问题。
This commit is contained in:
ThearchyHelios
2026-09-14 14:09:34 +08:00
parent 5ac681c481
commit 4e901be0ec
5 changed files with 42 additions and 2329 deletions
+4 -1
View File
@@ -1,7 +1,7 @@
# 运行期数据:数据库、沙箱工作区、上传文件、自动生成的加密密钥
/data/
# Python
# Python(环境由 conda 管理,不入库)
__pycache__/
*.py[cod]
.venv/
@@ -24,3 +24,6 @@ dist/
.idea/
.vscode/
*.swp
# 已迁到 conda,不再用 uv
uv.lock
+6
View File
@@ -26,6 +26,12 @@ dependencies = [
"cryptography>=43.0",
]
[project.optional-dependencies]
# microVM 沙箱(独立 Linux 内核)。约 35MB wheel + 首次约 50MB 运行时下载,
# 再加一次 OCI 镜像拉取(实测约 55s),所以不进默认安装。
# environment.yml 里已经带上了;单独装用 `pip install 'agentlab-backend[microvm]'`。
microvm = ["microsandbox>=0.6"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
-2323
View File
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
# AgentLab 的 conda 环境。
#
# conda env create -f environment.yml
# conda activate agentlab
#
# 依赖清单仍以 backend/pyproject.toml 为准 —— 这里只负责把解释器和那份
# 依赖装进一个具名环境,避免同一份依赖在两个地方各写一遍、然后慢慢漂移。
name: agentlab
channels:
- conda-forge
dependencies:
- python=3.12
- pip
- pip:
# [microvm] 带上独立内核的沙箱后端(约 35MB wheel,首次运行还要下载
# 约 50MB 运行时,外加一次 OCI 镜像拉取)。不需要就把方括号去掉,
# 沙箱会退回 Seatbelt —— 代价是内存限额在 macOS 上限不住。
- -e ./backend[microvm]
+14 -5
View File
@@ -6,11 +6,20 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
API_PORT="${AGENTLAB_PORT:-8000}"
WEB_PORT="${AGENTLAB_WEB_PORT:-5273}"
command -v uv >/dev/null || { echo "缺少 uv:brew install uv"; exit 1; }
command -v pnpm >/dev/null || { echo "缺少 pnpm:npm i -g pnpm"; exit 1; }
CONDA_ENV="${AGENTLAB_CONDA_ENV:-agentlab}"
echo "==> 同步依赖"
(cd "$ROOT/backend" && uv sync --quiet)
command -v conda >/dev/null || { echo "缺少 conda:https://conda-forge.org/miniforge/"; exit 1; }
command -v pnpm >/dev/null || { echo "缺少 pnpm:npm i -g pnpm"; exit 1; }
# 环境不存在就按 environment.yml 建一个
if ! conda env list | awk '{print $1}' | grep -qx "$CONDA_ENV"; then
echo "==> 创建 conda 环境 $CONDA_ENV"
conda env create -f "$ROOT/environment.yml"
fi
PY_BIN="$(conda run -n "$CONDA_ENV" python -c 'import sys; print(sys.executable)' 2>/dev/null)"
[ -x "$PY_BIN" ] || { echo "conda 环境 $CONDA_ENV 不可用,试试:conda env create -f environment.yml"; exit 1; }
echo "==> 后端解释器 $PY_BIN"
[ -d "$ROOT/frontend/node_modules" ] || (cd "$ROOT/frontend" && pnpm install)
cleanup() {
@@ -24,7 +33,7 @@ cleanup() {
trap cleanup EXIT INT TERM
echo "==> 后端 http://127.0.0.1:$API_PORT"
(cd "$ROOT/backend" && uv run uvicorn app.main:app --host 127.0.0.1 --port "$API_PORT" --reload) &
(cd "$ROOT/backend" && "$PY_BIN" -m uvicorn app.main:app --host 127.0.0.1 --port "$API_PORT" --reload) &
API_PID=$!
# 等后端起来再起前端,省得前端第一次请求就打空