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

如何为poetry build命令添加自定义函数钩子

Poetry 自定义 build 钩子实现预生成子包的方案

Poetry 1.4 及以上版本原生支持自定义构建钩子能力,完全可以对标 Setuptools 的 build_py hook 实现构建前自动生成 DSDL 子包的需求,以下是两种适配不同场景的实现方案:


方案1:使用原生 build.py 构建脚本(单项目场景推荐)

无需额外安装插件,配置成本最低,是官方推荐的自定义构建实现方式。

  1. 首先修改项目根目录的 pyproject.toml 配置:
[tool.poetry]
# 保留原有配置不变,新增以下行指定自定义构建脚本路径
build = "build.py"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
  1. 在项目根目录新建 build.py 文件,实现固定签名的 build 函数即可,你之前在 Setuptools 钩子中的 DSDL 生成逻辑可以直接迁移到该函数内:
from pyuavcan.dsdl import compile
from pathlib import Path

def build(setup_kwargs, package_dir):
    # package_dir 为项目源码根目录,如果你用src布局则对应src路径
    target_output_dir = Path(package_dir) / "你的包名" / "generated_dsdl"
    target_output_dir.mkdir(exist_ok=True, parents=True)
    # 替换为你实际的DSDL编译参数
    compile(
        source_paths=[Path("你的DSDL定义文件存放路径")],
        output_path=target_output_dir
    )

注意:如果不需要把生成的子包提交到Git仓库,把生成路径添加到.gitignore即可,Poetry执行poetry build时会自动读取build.py执行后生成的所有文件,纳入最终的sdist/wheel包。


方案2:自定义构建插件(多项目复用场景适用)

如果你的构建逻辑需要在多个项目中复用,可以开发Poetry自定义构建插件,通过继承poetry.core.masonry.builders.Builder的方式扩展构建流程,单项目场景不推荐使用,配置成本更高。


验证方法

执行poetry build --verbose可以在日志中看到构建脚本的执行记录,构建完成后解压生成的.whl或.tar.gz包即可验证生成的子包是否已被正确纳入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 02:45:03