PyPI 发布指南¶
本文档说明如何将 SARibbon Python 绑定发布到 PyPI,让用户通过 pip install 安装。
包结构¶
SARibbon 有三套 Python 绑定,发布为三个独立的 PyPI 包:
| PyPI 包名 | 绑定 | 构建后端 | 依赖 | 安装命令 |
|---|---|---|---|---|
PyQtSARibbon |
PyQt5 (SIP) | sipbuild.api |
PyQt5>=5.15 |
pip install PyQtSARibbon |
PyQt6SARibbon |
PyQt6 (SIP) | sipbuild.api |
PyQt6>=6.2 |
pip install PyQt6SARibbon |
PySideSARibbon |
PySide6 (Shiboken6) | scikit-build-core |
PySide6>=6.5 |
pip install PySideSARibbon |
项目目录结构¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
构建后端说明¶
PyQt5 / PyQt6 (SIP)¶
使用 sipbuild.api 作为 PEP 517 构建后端。sip-build / pip wheel 会自动:
1. 解析 .sip 文件生成 C++ 绑定代码
2. 编译 C++ 源码和绑定代码为扩展模块
3. 打包为标准 wheel
1 2 3 4 5 | |
PySide6 (scikit-build-core)¶
使用 scikit-build-core 作为 PEP 517 构建后端,桥接 pyproject.toml 和 CMake。pip wheel 会自动:
1. 调用 CMake 配置和构建
2. 运行 shiboken6 生成绑定代码
3. 编译为扩展模块
4. 通过 CMake install 目标打包为 wheel
1 2 | |
注意:PySide6 构建需要 Qt6 C++ 开发包(头文件),PySide6 pip 包不包含。
构建环境需额外安装 Qt6 开发包,但最终用户只需pip install PySideSARibbon即可使用。
CI/CD 自动化¶
GitHub Actions workflow: .github/workflows/publish-python-bindings.yml
触发条件¶
- GitHub Release 发布时自动触发
- 支持手动触发(
workflow_dispatch)
构建矩阵¶
| 平台 | Python 版本 | Qt 版本 |
|---|---|---|
| Windows x64 | 3.10, 3.11, 3.12 | Qt 6.8.3 (MSVC 2022) / Qt 5.15.2 (MSVC 2019) |
| Linux x64 | 3.10, 3.11, 3.12 | Qt 6 (apt) / Qt 5 (apt) |
| macOS | 3.10, 3.11, 3.12 | Qt 6 (brew) / Qt 5 (brew) |
发布方式¶
使用 PyPI Trusted Publishing (OIDC) — 无需 API Token:
1. 在 pypi.org 配置 Trusted Publisher
2. GitHub Actions 自动构建所有平台的 wheel
3. 使用 pypa/gh-action-pypi-publish 上传到 PyPI
版本同步¶
版本号在以下位置维护,需保持一致:
| 文件 | 字段 |
|---|---|
pyproject.toml (PyQt5) |
version = "x.y.z" |
pyqt6/pyproject.toml (PyQt6) |
version = "x.y.z" |
pyside6/pyproject.toml (PySide6) |
version = "x.y.z" |
pyside6/CMakeLists.txt |
project(PySideSARibbon VERSION x.y.z) |
pyside6/PySideSARibbon/__init__.py |
__version__ = "x.y.z" |
首次发布步骤¶
- 注册 PyPI 包名:在 pypi.org 注册以下包名(首次上传时自动注册):
PyQtSARibbonPyQt6SARibbon-
PySideSARibbon -
配置 Trusted Publishing:
- 登录 PyPI → Account settings → Publishing → Add a publisher
- 选择 GitHub,填入仓库
czyt1988/SARibbon - Workflow:
publish-python-bindings.yml -
Environment:
pypi -
创建 Release:
1 2 3
git tag v2.8.0 git push origin v2.8.0 # 在 GitHub 上创建 Release -
CI 自动构建并发布到 PyPI
-
验证安装:
1 2 3
pip install PyQtSARibbon # PyQt5 pip install PyQt6SARibbon # PyQt6 pip install PySideSARibbon # PySide6