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

如何通过CMake/CPack构建兼容多平台的Python deb、rpm安装包

问题解答

1. 不需要必须生成中间setup.py脚本

你对文档的理解有偏差,硬编码路径的问题完全可以通过CMake动态查询解决,不需要绕setuptools流程:

  • CMake 3.15及以上版本自带的FindPython3模块已经提供了预定义的Python3_SITELIB变量,直接返回当前环境下Python第三方包的安装绝对路径,不需要你手动执行命令查询。
  • 针对DEB和RPM生成器对路径的不同要求,你可以通过判断CPack生成器类型动态调整路径格式:DEB生成器默认会给相对路径自动添加/usr前缀,你只需要把查询到的绝对路径去掉前缀即可;RPM生成器支持直接使用绝对路径,不需要修改。

2. 现成的可复用实现方案

不需要找额外的第三方模块,用CMake自带功能就能实现全平台适配,参考配置如下:

# 查找Python3环境
find_package(Python3 REQUIRED COMPONENTS Interpreter)

# 动态获取Python站点包绝对路径
set(ACME_PYTHON_PACKAGE_DIR "${Python3_SITELIB}/project_name" CACHE PATH "Python包安装路径")

# 适配不同CPack生成器的路径要求
if(CPACK_GENERATOR STREQUAL "DEB")
  # Debian系需要相对路径,去掉开头的/usr/前缀
  string(REPLACE "/usr/" "" ACME_PYTHON_PACKAGE_DIR "${ACME_PYTHON_PACKAGE_DIR}")
endif()

# 安装Python胶水代码
install(
  FILES __init__.py library.py
  DESTINATION ${ACME_PYTHON_PACKAGE_DIR}
  COMPONENT python
)

如果你确实需要使用setuptools流程(比如要处理复杂的Python依赖、字节码编译等场景),可以用以下配置直接调用安装命令,不需要手动生成setup.py:

install(CODE "
  execute_process(
    COMMAND ${Python3_EXECUTABLE} setup.py install --root \$ENV{DESTDIR}/
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  )
" COMPONENT python)

该配置会自动适配DEB和RPM的构建流程,不需要针对发行版做额外修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:04