svnpypi
基于 SVN 的轻量 Python 内部包分发 CLI。复用现有 SVN 认证和权限,完成 wheel / sdist 的上传、查询、下载、SHA256 校验和 pip 安装,无需新增包服务器。
当前版本:0.2.2。修复并发上传清单丢失、SVN 超时、仓库 URL 参数注入及非包目录过滤。
安装与升级
要求 Python >=3.9、pip 和 PATH 中可用的原生 svn。生产请选择仍受官方维护的 Python。推荐在新的虚拟环境安装,避免影响其他项目。
Windows PowerShell:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install "svnpypi==0.2.2"
.\.venv\Scripts\svnpypi.exe --help
Linux / macOS:
python3 -m venv .venv
.venv/bin/python -m pip install "svnpypi==0.2.2"
.venv/bin/svnpypi --help
旧 svnpypi<=0.1.7 不要直接普通升级。 旧包捆绑的 pysvnlite/ 文件会与独立包冲突,pip 卸载旧包时可能删除新库。已发生导入失败、或需要原地迁移时,按安装与升级指南先卸载再安装。仅 pip check 不能证明文件完整。
svnpypi 从 0.2.0 起仅包含 CLI,当前通过 pysvnlite>=0.2.2,<0.3 使用独立 SVN API。仅需 Python SVN API 时直接安装 pysvnlite。离线部署须携带完整依赖 wheel,不能只复制 svnpypi wheel。
最小工作流
先激活上面的环境。将示例 URL 替换为团队测试通道;上传和写探针会修改远端 SVN,只对授权目录操作。
svnpypi doctor --repo-url svn+ssh://svn.company.com/python-packages/test
svnpypi upload dist/* --repo-url svn+ssh://svn.company.com/python-packages/test
svnpypi list --repo-url svn+ssh://svn.company.com/python-packages/test
svnpypi install my-internal-tool --version 1.2.3 --repo-url svn+ssh://svn.company.com/python-packages/test --require-hash --record .svnpypi/install.json
dist/ 应只保留本次要上传的制品,或显式传入文件名。业务验证通过后,将同一批构建产物上传至 release。不要重新构建或覆盖同名不同内容的制品。
| 命令 | 用途 |
|---|---|
doctor |
检查 SVN、pip 和仓库访问;--check-write 会创建并删除远端临时目录 |
upload |
上传标准 wheel / sdist,维护 SHA256SUMS |
list |
列出包与版本 |
install |
选择兼容制品,下载校验后调用当前 Python 的 pip |
sync |
读取 [tool.svnpypi] 并调用 install,不实现依赖解析器 |
--json 供自动化读取,--pip-args 后的参数原样交给 pip,须放在命令末尾。默认仓库地址可用 SVNPYPI_REPO_URL 设置。完整选项与错误边界见命令参考。
使用边界
- 只管理 Python wheel / sdist,不提供 Web 服务、通用文件镜像或完整 PyPI 协议。
- SVN 负责认证、ACL、审计与备份。不要将密码写入 URL、命令行或日志。
- 同名制品仅在 SHA256 相同时跳过;不同内容拒绝覆盖。多包上传不是跨包原子事务。
SHA256SUMS证明内容一致性,不是签名;--record是单次安装证据,不是完整依赖锁文件。install只从 SVN 获取所选制品,其依赖仍由 pip 解析;离线时须准备全部依赖。- 临时文件使用操作系统临时目录。部分 Windows / TortoiseSVN 构建无法正确处理中文绝对路径;检出后检查能识别虚假成功,但不会修复原生编码。详见平台验证与限制。
- SVN、pip 和远端认证组合需在部署环境验收;发布成功不代表所有平台已验证。
--timeout SECONDS/SVNPYPI_TIMEOUT默认每个 SVN 命令 300 秒,0 为不限时;这不是整个任务或 pip 安装的总时限,CI 仍应设置作业总时限。 - 仓库 URL 只接受
http/https/svn/svn+ssh/file,禁止账号密码、查询参数、片段和空白。认证通过 SVN 缓存或 SSH agent 配置;仅在信任的项目中执行sync,它会读取项目配置并安装代码。 - 完整超时清理要求
pysvnlite>=0.2.2,<0.3,安装本版会按依赖下限更新底层库;详见变更日志。旧 0.2.1 及以下版本需升级才能获得本轮修复。
文档入口
- 文档中心:按使用、部署和维护任务导航。
- 安装与升级、离线 / SVN 首装。
- 稳定使用、部署验收。
- 独立拆包说明、项目自身的 PyPI 发布。
- 路线图、中文变更日志。
开发验证
在仓库根目录、已激活的开发虚拟环境执行:
python -m pip install -e ".[dev,release]"
python -m ruff check src tests scripts
python -m mypy src scripts
python -m pytest -q
python scripts/release_pypi.py
发布脚本默认只检查和构建,不上传;生产上传需要干净工作区、完整检查和已原样推送的 annotated tag。wheel / sdist 不包含 AI 文件、测试、CI、发布脚本或 pysvnlite 源码。测试仅向临时 file:// SVN 仓库写入。
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file svnpypi-0.2.2.tar.gz.
File metadata
- Download URL: svnpypi-0.2.2.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
136a8e3b6aa9b5a2a1b7b525d7c128e3f8fec4f9a93663ac4f6f13fdc0ce483c
|
|
| MD5 |
95a595649532ee57c09de24beac37bcd
|
|
| BLAKE2b-256 |
c98cc7fc324d36534bfb63c6b58b1d4b0c3d49a36f48847e223e9800dbf9b37b
|
File details
Details for the file svnpypi-0.2.2-py3-none-any.whl.
File metadata
- Download URL: svnpypi-0.2.2-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b63d7f74f03d77aaf3fbeb9b057a787216f5c45c985303671149c277280fdf7b
|
|
| MD5 |
c21f425d695699c5e0a8a0fc7110f0ff
|
|
| BLAKE2b-256 |
a59662f6d212ad372f4dde84480b8d06daad8433e660316e4cd0376db86e3ac8
|