You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于本地Git提交构建Python发行包的本地实现方法

基于Git实现Python包本地打包(复用Git追踪规则+额外排除)

核心思路

直接复用Git已定义的文件追踪规则,避免在pyproject.toml或MANIFEST.in中重复维护文件包含/排除列表,同时支持叠加少量额外排除规则,确保打包内容与Git提交/标签同步,版本号与Git标签对齐。

方法1:用git archive导出干净代码后打包

这种方式完全基于Git已提交内容生成打包目录,可手动添加额外排除:

  • 导出当前Git提交(或指定标签)的所有追踪文件到临时目录:
    # 导出HEAD指向的提交内容到temp_package目录
    git archive HEAD --format=tar | tar -x -C ./temp_package
    
  • 在临时目录中删除需要额外排除的文件/目录:
    rm -rf ./temp_package/notes ./temp_package/test_outputs
    
  • 进入临时目录执行打包命令:
    cd ./temp_package
    python -m build
    
  • 打包完成后,dist/目录下的文件即为干净的发行版,可直接上传PyPI。

方法2:通过setuptools_scm自动关联Git追踪与版本

利用setuptools_scm工具,让打包流程自动读取Git追踪文件和版本信息,同时支持配置额外排除规则:

  1. 在pyproject.toml中配置构建后端和依赖:
    [build-system]
    requires = ["setuptools>=61.0", "setuptools_scm"]
    build-backend = "setuptools.build_meta"
    
    [tool.setuptools_scm]
    # 可选:控制版本生成逻辑,比如基于标签+提交次数
    version_scheme = "post-release"
    
  2. 添加额外排除规则到pyproject.toml:
    [tool.setuptools.exclude-package-data]
    # 对所有包排除指定文件/目录
    "*" = ["*.tmp", "notes/**/*", "test_outputs/**/*"]
    
  3. 直接运行打包命令,setuptools_scm会自动:
    • 仅包含Git追踪的文件(忽略未追踪的临时文件)
    • 从Git标签/提交记录生成版本号
    • 应用配置的额外排除规则
    python -m build
    

版本同步与发布流程

  1. 完成代码提交后,打对应版本的Git标签:
    git tag v1.0.0
    git push origin v1.0.0
    
  2. 基于该标签打包(方法1中替换HEAD为标签名v1.0.0,方法2会自动读取标签版本)
  3. 上传PyPI时,版本号会与Git标签完全一致,实现仓库历史与PyPI版本同步。

注意事项

  • 确保所有需要纳入发行包的文件已被Git追踪(git add并提交)
  • 未提交的文件不会被打包,避免临时文件混入发行版
  • 额外排除规则仅需维护少量特殊文件,无需重复Git已有的忽略规则

内容的提问来源于stack exchange,提问作者o17t H1H'S'k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:01:35