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

使用pyproject.toml/PEP518时,如何让Setuptools编译带调试符号的扩展?

在PEP 517/621规范下编译带调试符号的Python C++扩展

当然可以在新规范下编译带调试符号的Python扩展,以下是两种可行的方案:

方案一:通过pip临时传递编译参数

使用pip install时,通过--config-setting参数向Setuptools的build_ext传递debug选项,格式需要用build_ext--<option>=<value>的形式:

pip install . --config-setting="build_ext--debug=1"

如果使用build工具直接构建分发包,命令为:

python -m build --config-setting="build_ext--debug=1"

该方式会临时启用调试编译,不会修改项目配置文件,适合临时排查问题。

方案二:在pyproject.toml中持久化配置

在项目的pyproject.toml中添加tool.setuptools.build_ext配置段,启用调试编译:

[tool.setuptools.build_ext]
debug = true

之后执行pip install .就会自动编译带调试符号的版本。如果需要恢复默认编译,只需删除或注释这段配置即可。

为什么之前的尝试失败?

  • pip --debug是pip自身的调试选项,不会传递给编译后端,因此被静默忽略;
  • --global-option/--build-option属于PEP 517之前的旧方式,已被弃用且会被新后端忽略;
  • 直接传递--debug给config-setting时,没有指定是build_ext的选项,Setuptools无法识别该参数;
  • 之前在pyproject.toml中添加的[build_ext]段格式错误,新规范下需要放在[tool.setuptools.build_ext]下才会被Setuptools识别。

启用debug选项后,Setuptools会自动调整编译参数:移除-O3优化、添加-g调试符号、不定义NDEBUG宏,生成的扩展库会包含完整的调试信息,即使不附加调试器也能辅助诊断崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:16:14