title: 发布流程指南 description: Backtrader 版本管理和发布流程的完整指南
发布流程指南¶
本文档描述 Backtrader 项目的版本管理策略和发布流程。遵循这些准则可以确保发布的一致性、可追溯性和可靠性。
目录¶
版本管理策略¶
语义化版本¶
Backtrader 遵循 [语义化版本 2.0.0](https://semver.org/lang/zh-CN/) 规范:
MAJOR.MINOR.PATCH
```bash
| 位置 | 名称 | 说明 | 示例 |
|------|------|------|------|
| MAJOR | 主版本号 | 包含破坏性 API 变更时递增 | 1.0.0 → 2.0.0 |
| MINOR | 次版本号 | 向后兼容的新功能时递增 | 1.0.0 → 1.1.0 |
| PATCH | 补丁版本号 | 向后兼容的 Bug 修复时递增 | 1.0.0 → 1.0.1 |
### 版本号示例
| 版本 | 类型 | 说明 |
|------|------|------|
| `1.0.0` | 初始发布 | 第一个稳定版本 |
| `1.0.1` | 补丁 | Bug 修复 |
| `1.1.0` | 次版本 | 新增 CTP 期货支持 |
| `1.2.0` | 次版本 | 新增 WebSocket 订单推送 |
| `2.0.0` | 主版本 | 移除元类架构 |
### 预发布版本
对于不稳定的版本,可以使用预发布标识符:
| 标识符 | 说明 | 示例 |
|--------|------|------|
| `alpha` | 内部测试版本 | `1.2.0-alpha.1` |
| `beta` | 公开测试版本 | `1.2.0-beta.1` |
| `rc` | 候选发布版本 | `1.2.0-rc.1` |
### 开发版本
开发中的版本使用 `dev` 后缀:
```bash
1.3.0-dev
```bash
- --
## 发布分支策略
### 分支模型
```bash
┌─────────────────┐
│ master (稳定) │
│ v1.0.0, v1.1.0 │
└────────▲────────┘
│ 合并
│
┌─────────────┐ ┌─────┴──────┐ ┌─────────────┐
│ feature/* │──────▶│ dev │───────▶│ release/* │
│ 功能分支 │ │ (主开发) │ │ 发布准备分支 │
└─────────────┘ └────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ ctp │
│ CTP 期货开发 │
└─────────────┘
```bash
### 分支说明
| 分支 | 用途 | 合并目标 | 保护规则 |
|------|------|----------|----------|
| `master` | 稳定发布版本 | 仅来自 `release/*` | 必须通过 PR,需要审核 |
| `dev` | 主开发分支 | 接受 `feature/*` 合并 | 必须通过 PR,需要 CI 通过 |
| `release/x.y.z` | 发布准备分支 | 合并到 `master` 和 `dev` | 严格版本控制 |
| `feature/*` | 功能开发分支 | 合并到 `dev` | 常规开发 |
| `hotfix/*` | 紧急修复分支 | 合并到 `master` 和 `dev` | 快速通道 |
### 发布分支创建
```bash
# 从 dev 分支创建发布分支
git checkout dev
git pull origin dev
git checkout -b release/1.2.0
# 推送到远程
git push -u origin release/1.2.0
```bash
- --
## 发布前检查清单
### 1. 代码质量检查
```bash
# 格式化检查
make format-check
# Linting
ruff check backtrader/
# 类型检查
make type-check
# 安全检查
make security
```bash
- *通过标准**:
- 无格式化错误
- 无 Linting 错误(或已批准的例外)
- 类型错误率 < 5%
- 无高危安全问题
### 2. 测试套件
```bash
# 运行完整测试套件
pytest tests/ -n 4 -v --tb=short
# 测试覆盖率
pytest tests/ --cov=backtrader --cov-report=term-missing
# 集成测试(需要凭证)
pytest tests/integration/ -m integration -v
```bash
- *通过标准**:
- 所有核心测试通过率 100%
- 代码覆盖率 >= 75%
- 无 P0、P1 级别的测试失败
### 3. 性能基准
```bash
# 运行性能基准测试
make benchmark
# 与上一版本对比
pytest tests/benchmarks/ --benchmark-compare
```bash
- *通过标准**:
- 性能回退 < 5%
- 无新的性能瓶颈
### 4. 文档更新
- [ ] CHANGELOG.md 已更新
- [ ] 版本号已更新
- [ ] API 文档已同步
- [ ] 迁移指南(如需要)
- [ ] 发布说明已起草
### 5. 兼容性验证
```bash
# 测试 Python 版本兼容性
pyenv local 3.8 3.9 3.10 3.11 3.12 3.13
for version in 3.8 3.9 3.10 3.11 3.12 3.13; do
pyenv shell $version
pytest tests/ -q
done
```bash
- *通过标准**:
- 在 Python 3.8-3.13 上均可运行
- 无弃用警告
### 6. 依赖检查
```bash
# 检查依赖安全性
safety check
# 检查过时的依赖
pip list --outdated
```bash
### 7. 发布前会议
在大版本发布前,召开发布前会议确认:
- 功能完整性
- 已知问题列表
- 回滚计划
- 发布时间窗口
- 负责人分配
- --
## 发布流程
### 步骤 1: 更新版本号
- *文件**: `setup.py`
```python
setup(
name="backtrader",
version="1.2.0", # 更新此行
...
)
```bash
- *文件**: `backtrader/__init__.py`(如果存在)
```python
__version__ = "1.2.0"
```bash
### 步骤 2: 更新 CHANGELOG
- *文件**: `CHANGELOG.md`
```markdown
## [1.2.0] - 2026-03-15
### Added
- 新增 CTP 期货交易支持 (P0)
- WebSocket 订单推送功能 (P1)
- 自适应速率限制器 (P2)
### Changed
- CCXT Broker 错误处理优化
- 提升回测性能 15%
### Fixed
- 修复数据长度不一致导致提前终止的问题
- 修复 CrossOver 指标依赖顺序问题
### Removed
- 移除过时的 `DataStream` 类(已废弃 3 个版本)
```bash
### 步骤 3: 创建发布分支
```bash
# 从 dev 创建发布分支
git checkout dev
git pull origin dev
git checkout -b release/1.2.0
# 推送到远程
git push -u origin release/1.2.0
```bash
### 步骤 4: 提交版本更新
```bash
# 添加变更文件
git add setup.py CHANGELOG.md backtrader/__init__.py
# 提交
git commit -m "release: v1.2.0 — 准备发布
- 更新版本号至 1.2.0
- 完成 CHANGELOG 更新
- 通过所有发布前检查"
```bash
### 步骤 5: 合并到 master
```bash
# 切换到 master
git checkout master
git pull origin master
# 合并发布分支
git merge release/1.2.0 -m "Merge release/1.2.0 into master"
# 推送到远程
git push origin master
```bash
### 步骤 6: 创建版本标签
```bash
# 创建带注释的标签
git tag -a v1.2.0 -m "v1.2.0: CTP 期货支持与 WebSocket 订单推送
新增功能:
- CTP 期货完整支持
- WebSocket 订单推送
- 自适应速率限制
改进:
- CCXT Broker 错误处理
- 15% 性能提升
修复:
- 数据长度问题
- CrossOver 依赖顺序"
# 推送标签到远程
git push origin v1.2.0
```bash
### 步骤 7: 合并回 dev
```bash
# 切换到 dev
git checkout dev
git pull origin dev
# 合并 master(确保 dev 包含发布变更)
git merge master -m "Merge master back to dev after v1.2.0 release"
# 推送
git push origin dev
```bash
### 步骤 8: 构建发布包
```bash
# 清理旧的构建
make clean
# 构建 sdist 和 wheel
python -m build
# 检查构建包
twine check dist/backtrader-1.2.0*
```bash
### 步骤 9: 上传到 PyPI
```bash
# 上传到测试 PyPI(先验证)
twine upload --repository testpypi dist/*
# 安装测试版本验证
pip install --index-url <https://test.pypi.org/simple/> backtrader
# 确认无误后上传到正式 PyPI
twine upload dist/backtrader-1.2.0*
```bash
### 步骤 10: 创建 GitHub Release
使用 gh CLI 或在 GitHub 网页上创建:
```bash
# 使用 gh CLI
gh release create v1.2.0 \
- -title "v1.2.0: CTP 期货支持与 WebSocket 订单推送" \
- -notes-file RELEASE_NOTES.md \
- -draft
```bash
- *发布说明模板**:
```markdown
# Backtrader v1.2.0 发布说明
发布日期: 2026-03-15
## 新增功能
### CTP 期货交易支持
- 完整的 CTP API 集成
- 支持上期所、大商所、郑商所、能源中心
- 自动连接管理(SimNow 7x24/交易时段)
- 66 个单元测试覆盖
### WebSocket 订单推送
- 实时订单状态推送
- 自动 WebSocket 订阅管理
- 降低 API 调用延迟 50%
### 自适应速率限制
- 智能速率限制调整
- 防止交易所限流
- 自动重试机制
## 改进
- CCXT Broker 错误处理优化
- 回测性能提升 15%
- Cython 加速核心计算
## 修复
- 修复数据长度不一致导致提前终止的问题
- 修复 CrossOver 指标依赖顺序问题
## 升级指南
```bash
pip install --upgrade backtrader
```bash
### 迁移注意事项
如需从 CTP 旧版迁移:
1. 更新 `.env` 配置文件
2. 使用新的 `CTPStore` API
3. 参考 `docs/CCXT_LIVE_TRADING_GUIDE.md`
## 完整变更
详见 [CHANGELOG.md](<https://github.com/yunjinqi/backtrader/blob/master/CHANGELOG.md)>
```bash
- --
## 发布后任务
### 1. 更新文档
```bash
# 生成文档
make docs
# 部署文档(根据项目配置)
make docs-deploy
```bash
### 2. 发布公告
- *渠道**:
- [ ] GitHub Discussions
- [ ] 项目官网
- [ ] 邮件列表(如有)
- [ ] 社交媒体(如有)
- *公告模板**:
```markdown
# Backtrader v1.2.0 现已发布
我们很高兴地宣布 Backtrader v1.2.0 正式发布!
## 亮点功能
- **CTP 期货交易支持**: 完整支持国内期货市场
- **WebSocket 订单推送**: 更快的订单响应
- **性能提升**: 15% 回测性能改进
## 安装
```bash
pip install --upgrade backtrader
```bash
## 文档
- 发布说明: [链接]
- 迁移指南: [链接]
- 完整文档: [链接]
## 感谢
感谢所有贡献者!
```bash
### 3. 监控反馈
发布后 48 小时内:
- 监控 GitHub Issues
- 检查 PyPI 下载统计
- 关注社区反馈
- 准备快速响应 Bug 修复
### 4. 创建下一版本
```bash
# 更新 dev 分支的 CHANGELOG
vim CHANGELOG.md
# 添加新的 Unreleased 部分
## [Unreleased] - dev branch
### Added
- (新功能占位)
```bash
### 5. 清理发布分支
```bash
# 删除本地发布分支
git branch -d release/1.2.0
# 删除远程发布分支(可选)
git push origin --delete release/1.2.0
```bash
- --
## 紧急发布流程
### 触发条件
- 生产环境严重 Bug
- 安全漏洞
- 数据损坏风险
### 流程
```bash
# 1. 从 master 创建 hotfix 分支
git checkout master
git pull origin master
git checkout -b hotfix/1.2.1
# 2. 修复问题
# (进行必要的代码修改)
# 3. 测试验证
pytest tests/ -n 4 -v
# 4. 提交修复
git commit -am "hotfix: 修复严重数据损坏问题"
# 5. 合并到 master
git checkout master
git merge hotfix/1.2.1
# 6. 创建标签和发布
git tag -a v1.2.1 -m "v1.2.1: 紧急修复"
git push origin master v1.2.1
# 7. 合并回 dev
git checkout dev
git merge master
git push origin dev
# 8. PyPI 发布
python -m build
twine upload dist/backtrader-1.2.1*
```bash
- --
## 回滚流程
### 何时回滚
- 发布后发现严重 Bug
- 安全问题
- 无法快速修复的问题
### 回滚步骤
```bash
# 1. 通知用户暂停升级
# 2. 从 PyPI 删除有问题的版本(仅限发布后 24 小时内)
# 使用 twine 或访问 PyPI 手动删除
twine delete --version 1.2.0 backtrader
# 3. 创建修复版本
# 通常是 1.2.1 (补丁版本)
# 4. 重新发布修复版本
# 按正常发布流程进行
```bash
### 回滚公告
```markdown
# 紧急通知: v1.2.0 回滚
由于发现严重问题,v1.2.0 已被撤回。请勿使用此版本。
受影响的用户应:
1. 降级到 v1.1.0
2. 等待 v1.2.1 修复版本
```bash
git clone <https://github.com/cloudQuant/backtrader.git>
cd backtrader && pip install -U .
```bash
我们将在 24 小时内发布修复版本。
```bash
- --
## 快速参考
### 发布命令速查
```bash
# 完整发布流程
git checkout dev && git pull
git checkout -b release/1.2.0
# 编辑 setup.py, CHANGELOG.md
git add setup.py CHANGELOG.md
git commit -m "release: v1.2.0"
git checkout master && git merge release/1.2.0
git tag -a v1.2.0 -m "v1.2.0"
git push origin master v1.2.0
git checkout dev && git merge master
git push origin dev
make clean
python -m build
twine upload dist/*
gh release create v1.2.0 --notes "发布说明..."
```bash
### 检查清单速查
```markdown
发布前:
- [ ] 测试通过 (100% 核心测试)
- [ ] 代码覆盖率 >= 75%
- [ ] 格式化检查通过
- [ ] 类型检查通过
- [ ] 安全检查通过
- [ ] CHANGELOG 已更新
- [ ] 版本号已更新
- [ ] 文档已同步
发布中:
- [ ] 发布分支已创建
- [ ] 版本更新已提交
- [ ] 已合并到 master
- [ ] 标签已创建并推送
- [ ] 已合并回 dev
- [ ] 构建包已验证
- [ ] 已上传到 PyPI
- [ ] GitHub Release 已创建
发布后:
- [ ] 文档已部署
- [ ] 公告已发布
- [ ] 反馈监控已启动
```bash
- --
## 另请参阅
- [开发环境设置](setup_zh.md)
- [代码风格指南](style_zh.md)
- [测试指南](testing_zh.md)
- [贡献指南](contributing_zh.md)
- [CHANGELOG.md](../../CHANGELOG.md)