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

如何用Shiboken6生成abi3兼容的Wheel包?

构建abi3兼容的PySide/Shiboken Wheel包

核心解决方案:通过CMake传递FORCE_LIMITED_API参数

你没直接包含Python.h没关系——Shiboken绑定生成器内部会处理Python API调用,所以通过CMake定义FORCE_LIMITED_API变量是正确路径,这个参数会让Shiboken自动在生成的绑定代码中启用Py_LIMITED_API宏,限制使用ABI3兼容的API子集。

具体操作步骤

1. 配置CMake参数

方式一:修改CMakeLists.txt

在项目的CMake配置文件中添加:

# 开启ABI3兼容模式
set(FORCE_LIMITED_API ON CACHE BOOL "Force limited Python API for bindings")
set(Python_LIMITED_API ON CACHE BOOL "Use Python's limited API")
# 指定ABI3兼容的最低Python版本(比如3.6,是abi3最早支持的版本)
set(Python_VERSION_MIN_REQUIRED 3.6)

方式二:在setup.py中传递给scikit-build

如果用scikit-build管理构建,直接在setup.py的cmake_args里添加参数:

from skbuild import setup

setup(
    # 你的项目其他配置...
    cmake_args=[
        "-DFORCE_LIMITED_API=ON",
        "-DPython_LIMITED_API=ON",
        "-DPython_VERSION_MIN_REQUIRED=3.6",
    ]
)

2. 验证绑定代码

构建时Shiboken会自动在生成的绑定代码头部插入类似以下内容,完全符合Python官方对Py_LIMITED_API的要求:

#define Py_LIMITED_API 0x03060000
#include <Python.h>

3. 构建并修复Wheel

用scikit-build完成构建后,使用repairwheel处理时确保生成abi3标签的包:

repairwheel --plat manylinux_2_24_x86_64 --wheel-dir dist/ --output-dir dist/abi3/

最终生成的Wheel标签会是cp36-abi3-manylinux_2_24_x86_64(对应你指定的最低Python版本)。

关键注意点

  • FORCE_LIMITED_API是Shiboken社区实践中的标准变量,尽管未在官方文档中重点说明,但确实是实现abi3兼容的有效手段。
  • 如果你有自定义C++扩展代码,也要确保只使用ABI3允许的Python API,避免调用受限范围外的函数。
  • 完成构建后,务必在多个Python版本(如3.6、3.10、3.12)上测试Wheel的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:06:27