chore(deps): 锁三机统一依赖基线(Python3.10+pandas2.3/numpy2.2新稳定版, requirements-lock.txt)
依据: - vnpy 4.4.0 pyproject: numpy>=2.2.3 / pandas>=2.2.3(均无上限,不钉<3) - pandas 目标=2.3.3(2.x 稳定线顶端,3.0 破坏性变更未回归,按稳定优先不采用) - numpy 目标=2.2.6(与 TA-Lib 0.6.8 在 NAS 生产容器实证兼容) - 其余依赖==钉到 NAS 容器已验证可跑版本(fastapi 0.139/uvicorn 0.49/polars 1.42 等) - Python 3.10 三机统一基线(xtquant 限 3.6-3.12,VPS 锁 3.10) - 不含 vnpy(源码引用)/ xtquant(VPS Windows only)/ CUDA(torch 传递依赖) - 矩阵文档新增「锁定决策(2026-07-15)」小节:依据+迁移步骤+验证前置 - 验证前置:落生产前须全套 pytest 0 回归 + 一个 CTA 回测冒烟
This commit is contained in:
@@ -83,6 +83,74 @@
|
||||
|
||||
---
|
||||
|
||||
## 🎯 锁定决策(2026-07-15)
|
||||
|
||||
> 产出文件:`requirements-lock.txt`(项目根,三机共享单一基线)。本节记录决策依据与迁移/验证步骤。
|
||||
|
||||
### 目标版本组合
|
||||
|
||||
| 维度 | 目标版本 | 依据 |
|
||||
|------|---------|------|
|
||||
| **Python** | **3.10**(三机统一基线) | xtquant 限 3.6–3.12;VPS 生产锁 3.10.11;NAS 容器 3.10.20。三机唯一交集 |
|
||||
| **pandas** | **2.3.3**(2.x 稳定线顶端,**非 3.0**) | 见下方「pandas 不升 3.0 的依据」 |
|
||||
| **numpy** | **2.2.6**(2.2.x 最新稳定) | TA-Lib 0.6.8 在 NAS 容器与 numpy 2.2.6 实证兼容;vnpy 要 `>=2.2.3` |
|
||||
| **TA-Lib** | **0.6.8** | vnpy 要 `>=0.6.4`;0.6.8 ≫ 0.4.32(numpy 2.x 兼容门槛),NAS 实证 |
|
||||
| fastapi / uvicorn | 0.139.0 / 0.49.0 | NAS 实证版本 |
|
||||
| polars / pyarrow | 1.42.1 / 24.0.0 | NAS 实证版本 |
|
||||
| 其余依赖 | 见 `requirements-lock.txt`(全部 `==` 钉到 NAS 实证版本) | 「已验证可跑」> 盲目追新 |
|
||||
|
||||
### 关键证据 1:vnpy 4.4.0 声明的依赖上限(决定性)
|
||||
|
||||
读 `vnpy_v4.4.0/pyproject.toml`(项目靠 `sys.path.insert` 引用源码,其声明即天花板):
|
||||
|
||||
```toml
|
||||
requires-python = ">=3.10" # classifiers: 3.10 / 3.11 / 3.12 / 3.13
|
||||
dependencies = [
|
||||
...
|
||||
"numpy>=2.2.3", # ← 仅下限,无上限(不钉 <3)
|
||||
"pandas>=2.2.3", # ← 仅下限,无上限(不钉 <3)
|
||||
"ta-lib>=0.6.4",
|
||||
"PySide6==6.8.2.1", # ← 精确钉死
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
**结论:vnpy 4.4.0 并未声明 `pandas<3`。** pandas 3.0 在语法上被允许。因此选 2.3.x 是**稳定性决策**(见下),而非 vnpy 强制天花板。
|
||||
|
||||
### 关键证据 2:TA-Lib 与 numpy 2.x 兼容
|
||||
|
||||
- NAS 容器实地核实(`docker exec ... python -c`):`Python 3.10.20 + pandas 2.3.3 + numpy 2.2.6 + TA-Lib 0.6.8` 全部正常 import。
|
||||
- TA-Lib 0.6.8 远高于支持 numpy 2.x 的 0.4.32 门槛。**目标 numpy 2.2.6 与 TA-Lib 不冲突。**
|
||||
|
||||
### pandas 不升 3.0 的依据(与新稳定原则的对应)
|
||||
|
||||
- pandas 3.0 有大量破坏性变更(默认 dtype 变、chained assignment / `SettingWithCopyWarning` 升级为异常等),**未经 vnpy 4.4.0 源码回归**。
|
||||
- NAS 生产容器跑 pandas 2.3.3 已验证稳定;「新稳定」≠「盲追 major」,2.3.x 顶端的 2.3.3 本身就是近期版本、不算旧。
|
||||
- 与 §「不推荐的方向」一致:prod 升 3.0 major 须先在测试库充分回归,本次 lock 默认保守。
|
||||
- **若未来要升 pandas 3.0**:必须先跑全套 pytest + CTA 回测冒烟确认无回归,再改本 lock。
|
||||
|
||||
### 三机迁移步骤
|
||||
|
||||
1. **Mac 重建 venv310**(对齐生产 Python):
|
||||
```bash
|
||||
brew install python@3.10
|
||||
/opt/homebrew/bin/python3.10 -m venv venv310
|
||||
./venv310/bin/pip install -r requirements-lock.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
# vnpy 源码引用(sys.path.insert),无需 pip install vnpy
|
||||
# akshare 若 Mac 不跑采集可不装
|
||||
```
|
||||
废弃 `venv311`(pandas 3.0.3 / numpy 1.26.4 的分裂环境)。
|
||||
2. **NAS 容器**:当前生产依赖已与 lock 一致(lock 即取自该容器 freeze),按需 `pip install -r requirements-lock.txt` 校齐;**不动 vnpy 源码引用**。
|
||||
3. **VPS**:`pip install -r requirements-lock.txt` 装公共基线;xtquant 仍由 miniQMT site-packages 提供(Windows only,不入 lock)。
|
||||
|
||||
### ⚠️ 验证前置条件(lockfile 落生产前必须通过)
|
||||
|
||||
- [ ] **全套 pytest 0 回归**:测试环境按 `requirements-lock.txt` 全新装一遍后 `pytest -q` 全绿。
|
||||
- [ ] **CTA 回测冒烟**:至少跑一个 CTA 策略回测,确认 vnpy 源码 + TA-Lib + pandas 2.3.3 + numpy 2.2.6 协同无回归(收益/指标与基线一致)。
|
||||
- [ ] 任一项失败 → 不得部署到生产;回到本文件修正目标版本后再验。
|
||||
|
||||
---
|
||||
|
||||
## 4. Lock 建议(推荐方案,不执行)
|
||||
|
||||
### 推荐基线:对齐 NAS 容器(最稳定的生产近邻)
|
||||
|
||||
Reference in New Issue
Block a user