CMake CPack构建Python3 RPM包时brp-python-bytecompile报错处理
报错根本原因
RPM构建流程默认调用的brp-python-bytecompile脚本使用/usr/bin/python(通常对应Python2)预编译所有Python文件,你的代码中使用了Python3.6以上才支持的f-string语法,Python2无法识别因此抛出语法错误。即使你在源码首行指定了Python3的shebang,RPM默认的字节编译逻辑也不会读取单个文件的解释器声明。
方案1:跳过Python字节编译步骤
如果不需要预编译Python字节码(pyc文件),可以直接禁用该构建步骤,在你的CMakeLists.txt中添加以下配置即可:
set(CPACK_RPM_SPEC_MORE_DEFINE "%define __brp_python_bytecompile %{nil}")
该配置会直接将RPM构建流程中的字节编译步骤置空,不会再执行brp-python-bytecompile脚本。
方案2:指定使用Python3进行字节编译(更推荐)
如果需要保留预编译的pyc文件提升运行速度,可主动指定RPM使用Python3解释器完成字节编译,在CMakeLists.txt中添加以下配置:
# 声明RPM包依赖Python3 set(CPACK_RPM_PACKAGE_REQUIRES "python3") # 指定字节编译使用的Python解释器为Python3,同时指定Python3包安装路径 set(CPACK_RPM_SPEC_MORE_DEFINE "%define __python /usr/bin/python3 %define python3_sitelib %{_usr}/lib/python3/dist-packages")
配置后重新执行CMake构建和CPack打包,构建日志中brp-python-bytecompile的调用参数会变为/usr/bin/python3,即可正常识别Python3语法完成编译。
内容的提问来源于stack exchange,提问作者malat
相关产品推荐
相关产品推荐

