From 2ca2facce35d97376f80e8d208163187577f1f89 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Sat, 1 Aug 2026 12:23:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20requirements-docker=20=E8=A1=A5?= =?UTF-8?q?=E7=BB=84=E5=90=88/CTA=20=E8=BF=90=E8=A1=8C=E6=97=B6=E4=BE=9D?= =?UTF-8?q?=E8=B5=96(=E6=B2=BB=E9=87=8D=E5=BB=BA=E4=B8=A2=E5=8C=85?= =?UTF-8?q?=E5=90=8E=E6=82=A3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 容器是 docker commit 快照链(pre-init-rebuild 比 with-sqlite 多64包), 手动装的 bullet-trade/jqdatasdk/vnpy_ctastrategy/vnpy_sqlite 只活容器层, 从 base 重建会全丢。补进 requirements-docker.txt 钉到容器实证版(均PyPI可装): - bullet-trade==0.9.2(组合框架,import bullet_trade) - jqdatasdk==1.9.8(bullet_trade import 链必需) - vnpy_ctastrategy==1.4.1(CTA引擎) - vnpy_sqlite==1.1.3(vnpy sqlite驱动) 不补 pyecharts(0import残留)/jupyter栈(bloat) docs §10 记可复现重建步骤;干净重建待 env 空闲验证 --- docs/three-env-code-promote.md | 26 ++++++++++++++++++++++++++ requirements-docker.txt | 15 +++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/docs/three-env-code-promote.md b/docs/three-env-code-promote.md index c71a528..f6872dc 100644 --- a/docs/three-env-code-promote.md +++ b/docs/three-env-code-promote.md @@ -162,3 +162,29 @@ $D run -d --init --name sanguo_vnpy_v2 \ - 验证:`$D inspect sanguo_vnpy_v2 --format '{{.HostConfig.Init}}'` = `true`;`ps -o comm -p $(...PID)` = `docker-init`(tini)。 **正式 nas-verify(重建后必跑,同 ci-cd 口径)**:login(token 字段) + `/api/v1/strategy/list` 200 非空 + dbbardata 600519 SSE >0。 + +## 10. NAS 镜像可复现构建(避免 commit 链依赖丢失) + +**现状**:NAS 运行的 `sanguo_vnpy_v2:pre-init-rebuild` 是 **docker commit 快照链**(with-sqlite → 手动 pip 装 bullet-trade/jwt/… → commit),非从 Dockerfile 构建。手动装的包只活在容器层,**任何从 base 重建都会丢**。实测 `pre-init-rebuild` 比 `with-sqlite` 多 64 个包(含 jwt/bullet-trade/baostock/jqdatasdk/vnpy_ctastrategy/pytest/整个 jupyter 栈)。 + +**已修(2026-08-01)**:`requirements-docker.txt` 补齐缺失的**顶层运行时**依赖(此前只在容器层手动装;transitive 会自动拉,不用列): +- `bullet-trade==0.9.2`(组合框架,import 名 `bullet_trade`) +- `jqdatasdk==1.9.8`(`import bullet_trade` 默认 provider=jqdata 触发 import,包须在;实跑用 LocalUnifiedProvider 不调 online) +- `vnpy_ctastrategy==1.4.1`(CTA 策略引擎,sanguo_backtest/sanguo_live 广用) +- `vnpy_sqlite==1.1.3`(vnpy sqlite 驱动,trader/database.py 运行时动态加载) + +四个均已确认公共 PyPI 可装,版本钉死=容器实证版。**不补**:`pyecharts`(0 import 残留)、jupyter 栈(交互开发 bloat,非运行时)。 + +**可复现重建步骤**(⚠️**待空闲验证**——现运行容器 02 回测在跑,别动;这是验证步骤,不是修复本身,修复已落到 requirements): +```bash +D=/var/packages/Docker/target/usr/bin/docker +# 1. 建 base(docker/Dockerfile 装完整 requirements-docker.txt;Dockerfile.nas 的 FROM sanguo_vnpy:base 依赖它) +$D build -f docker/Dockerfile -t sanguo_vnpy:base . +# 2. 建 app 层(Dockerfile.nas FROM base + COPY 代码) +$D build -f docker/Dockerfile.nas -t sanguo_vnpy_v2:reproducible . +# 3. 起测试容器带 --init(见 §9),用新名不占 sanguo_vnpy_v2 +$D run -d --init --name sanguo_repro_test -v <同挂载> -p 8001:8000 sanguo_vnpy_v2:reproducible +# 4. nas-verify(login+strategy/list+dbbardata) + 跑一次 03 短测确认组合链路(bullet_trade import 通) +# 5. 全过才换掉 sanguo_vnpy_v2;pre-init-rebuild 暂留回滚 +``` +**遗留**:① 干净重建尚未实测(requirements 已对齐容器 216 包里的顶层子集,理论可复现,待 env 空闲验证);② `requirements-lock.txt`(==钉版基线)未同步这 4 包,且本身"当前未验",待统一。 diff --git a/requirements-docker.txt b/requirements-docker.txt index 1bdd983..41365cf 100644 --- a/requirements-docker.txt +++ b/requirements-docker.txt @@ -20,6 +20,21 @@ nbformat>=5.10.4 requests>=2.32.0 qrcode>=7.4.2 +# VeighNa 策略/数据库扩展(项目必需,非可选) +# vnpy_ctastrategy: CTA 策略引擎(sanguo_backtest/cta_engine·cta_optimizer·ashare_engine, sanguo_live 等广用) +# vnpy_sqlite: vnpy sqlite 数据库驱动(vnpy trader/database.py 运行时动态加载,缺则 vnpy 无法持久化) +vnpy_ctastrategy==1.4.1 +vnpy_sqlite==1.1.3 + +# ============================================ +# 组合策略框架(BulletTrade)—— 2026-08-01 补:此前只在容器层手动装,重建会丢 +# ============================================ +# bullet-trade: 多股票选股组合框架(sanguo_portfolio, 03/01/02 三策略; import 名 bullet_trade) +# jqdatasdk: bullet_trade import 时默认 provider=jqdata 触发 import jqdatasdk,需可解析 +# (实跑用 LocalUnifiedProvider 不调 jqdata online,但 import 链需要包存在,否则 import 崩) +bullet-trade==0.9.2 +jqdatasdk==1.9.8 + # VeighNa Gateway 扩展(可选,根据需要安装) # 注意:这些是独立的扩展包,未安装时不影响核心功能 # vnpy_ctp