把软件著作权源代码材料从手工整理变成可复核的自动化流程。
srcdocgen 是一个面向软件著作权申请场景的 Python CLI/TUI 工具。它从 Git 仓库读取已跟踪的源码文件,按项目类型自动筛选、剥离注释和空行,并一键导出可提交前复核的源代码材料 PDF、DOCX 和 manifest。
准备软著源代码材料时,最耗时的部分不是写代码,而是反复判断哪些文件该纳入、如何排除依赖和生成物、如何整理成固定页数的 PDF/DOCX。
| 手工整理 | Word 模板脚本 | srcdocgen | |
|---|---|---|---|
| 文件筛选 | 人工逐个选择 | 需自己写规则 | Git + 内置模板自动筛选 |
| 注释剥离 | 正则 / 手删 | 正则容易误删 | Pygments token 级精准剥离 |
| 输出格式 | 手动排版 | 通常仅 DOCX | PDF + DOCX + manifest |
| 源码不足 3000 行 | 自己凑 / 补空 | 看脚本实现 | 全量导出 + 明确提示 |
| 可追溯 | 无记录 | 无记录 | manifest.json 完整记录 |
| 交互确认 | ❌ | ❌ | ✅ TUI 终端界面 |
srcdocgen 需要 Python 3.12 或更高版本。
在 Git 仓库根目录,一行启动交互界面:
pipx run srcdocgen推荐用 pipx 安装,让命令行工具运行在独立环境里:
pipx install srcdocgen如果系统默认 Python 低于 3.12,可以指定解释器:
pipx install --python python3.12 srcdocgen也可以用 pip 安装到当前虚拟环境:
pip install srcdocgen以下示例假设目标项目是一个 Git 仓库,路径为 ./project。
srcdocgen init-config \
--repo ./project \
--template python \
--software-name "示例系统" \
--software-version "V1.0"这会在目标仓库根目录写入 srcdocgen.toml。你可以在其中调整软件名称、版本号、模板、包含/排除规则、脱敏开关、页数、每页行数和制表符宽度。
srcdocgen generate --repo ./project --out-dir ./softdoc生成结果写入 ./softdoc:
softdoc/
├── source-code.pdf # A4 等宽字体排版,带页眉页码
├── source-code.docx # 同内容 Word 格式
└── manifest.json # 完整的筛选和导出记录
如果你想在导出前检查文件选择结果:
srcdocgen tui --repo ./project --out-dir ./softdocPDF 使用 A4 页面、等宽字体,默认每页 50 行、共 60 页。页眉左侧显示软件名称和版本号,右侧显示页码,页眉与正文之间带横线分隔。在缺少系统 CJK 字体时会自动使用内置的 Noto Sans Mono CJK SC fallback。
manifest.json 记录每个文件的筛选结果,方便人工复核和留档追踪:
{
"path": "srcdocgen/export.py",
"language": "python",
"status": "included",
"reason": "eligible source file",
"original_line_count": 145,
"filtered_line_count": 118,
"selected_line_count": 118
}排除的文件同样有据可查:
{
"path": ".github/workflows/ci.yml",
"language": "config-file",
"status": "excluded",
"reason": "matched exclude glob: **/*.yml"
}| 模板 | 适用场景 |
|---|---|
android |
Android 应用 |
ios |
iOS 应用 |
web |
前端 Web 项目 |
node |
Node.js 后端 |
python |
Python 项目 |
java |
Java 项目 |
go |
Go 项目 |
generic |
其他技术栈 |
模板提供默认的包含/排除 glob、业务关键词和风险关键词。你可以在 srcdocgen.toml 中继续追加项目自己的规则。
- 文件列表来自
git ls-files,srcdocgen 不会修改目标仓库。 - 自动排除依赖目录、构建产物、测试文件、文档、锁文件、生成代码和二进制资源。
- 使用 Pygments token 剥离注释,避免误删字符串、URL、正则中的注释符号。
- 当过滤后源码不足 3000 行时,生成全部可纳入源码并给出提示;不补空、不伪造代码。
- 当源码超过 3000 行时,取前 30 页连续源码和后 30 页连续源码。
- 中小型 Web、Node.js、Python、Java、Go 项目
- Android 和 iOS 应用源码
- 需要从多个项目批量生成软著材料的团队
- 希望保留 manifest 以便复核纳入文件、排除原因和导出结果的项目
如果项目没有使用 Git,建议先把源码纳入 Git 管理后再运行 srcdocgen。
MIT License. See LICENSE.

