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

Python多子项目打包:如何在顶层目录构建生成各子项目包文件

解决方案

你的需求是典型的**单仓库多项目(Monorepo)**打包场景,当前配置的问题在于顶层pyproject.toml被Hatch识别为一个独立的打包项目,导致它把proj1和proj2合并成了名为projs的单包输出。通过调整Hatch的Monorepo配置可以实现你的需求,具体步骤如下:

1. 修正顶层pyproject.toml

移除顶层文件中用于打包的[project]和[tool.hatch.build.targets]块,改为配置Hatch的Monorepo管理规则,同时保留格式化工具的配置:

# 顶层pyproject.toml:仅用于格式化等工具配置
[tool.black]
line-length = 120

[tool.ruff]
line-length = 120

# Hatch Monorepo 核心配置:管理子项目
[tool.hatch.monorepo]
projects = [
  "proj1",
  "proj2"
]

# 全局构建配置:指定所有子项目的产物输出到顶层dist目录
[tool.hatch.build]
target-dir = "../dist"

2. 保留子项目的pyproject.toml配置

子项目的配置无需大幅修改,确保每个子项目的[project]块正确定义自身的包信息即可,比如proj1的配置保持原样:

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "proj1"
license = "AGPL-3.0-or-later"

[tool.hatch.version]
path = "proj1/__init__.py"

[tool.hatch.build.targets.sdist]
include = [
  "/proj1",
]

3. 执行批量构建

在顶层目录运行以下命令,即可同时构建所有子项目,并将.whl和.tar.gz产物统一输出到顶层dist/目录:

hatch build --all

如果需要单独构建某个子项目,可指定项目名称:

hatch build -r proj1

问题原因说明

之前的顶层配置中,你定义了[project]块并指定了packages=["proj1", "proj2"],Hatch会将这两个目录视为同一个包的子模块,因此生成了名为projs的合并包,路径结构自然出现冗余。改为Monorepo模式后,Hatch会将每个子目录视为独立的打包项目,分别处理它们的构建逻辑,最终输出各自的独立包产物。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:53:15