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

如何通过pyproject.toml从单个Python仓库构建多发行版包?

单仓库多发行包的pyproject.toml实现方案

完全可以用pyproject.toml实现单仓库输出多种发行包,下面提供两种实用方案:

方案一:基于Setuptools的条件打包(无额外工具依赖)

利用Setuptools的动态配置和环境变量控制打包内容,步骤如下:

  1. 编写pyproject.toml配置:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
version = "0.0.1"
dynamic = ["name", "packages"]

[tool.setuptools.dynamic]
name = {file = "package_name.txt"}
packages = {file = "packages_list.txt"}
  1. 编写打包控制脚本(比如prepare_build.py):
import os

# 根据环境变量决定打包类型
build_type = os.environ.get("BUILD_TYPE", "full")

if build_type == "c-only":
    # 仅打包c包
    with open("package_name.txt", "w") as f:
        f.write("project_c_only")
    with open("packages_list.txt", "w") as f:
        f.write("c\n")
else:
    # 打包全量a+b+c
    with open("package_name.txt", "w") as f:
        f.write("project_a+b+c")
    with open("packages_list.txt", "w") as f:
        f.write("a\n")
        f.write("b\n")
        f.write("c\n")
  1. 执行打包命令:
  • 打包全量包:
    python prepare_build.py && python -m build
    
  • 打包仅c的包:
    BUILD_TYPE=c-only python prepare_build.py && python -m build
    

执行后会在dist目录生成对应名称的包文件。

方案二:基于Hatch的多项目配置(更简洁)

Hatch是现代Python打包工具,原生支持单仓库多项目配置,无需额外脚本:

  1. 编写pyproject.toml配置:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

# 全量包配置
[project]
name = "project_a+b+c"
version = "0.0.1"
packages = ["a", "b", "c"]
package-dir = {"": "src"}

# 仅c的包配置
[tool.hatch.projects.project_c_only]
name = "project_c_only"
version = "0.0.1"
packages = ["c"]
package-dir = {"": "src"}
  1. 执行打包命令:
  • 打包全量包:
    hatch build
    
  • 打包仅c的包:
    hatch build -p project_c_only
    

Hatch会自动在dist目录生成两个不同的包,无需手动修改配置或重命名文件。

注意事项

  • 方案一依赖Setuptools,适合传统项目,无需额外安装工具;
  • 方案二依赖Hatch,需要先通过pip install hatch安装,配置更简洁,适合现代Python项目;
  • 两种方案都能保证从同一源码仓库输出不同内容的发行包,满足内部/外部使用的区分需求。

内容的提问来源于stack exchange,提问作者jjkparker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:40