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

QEMU RPM打包时如何移除或防范意外生成的__pycache__文件?

问题根因

Fedora 的 RPM 构建流程默认会运行 brp-python-bytecompile 钩子,自动对安装到 buildroot 内的所有 Python 脚本生成字节码缓存(即 __pycache__ 目录与 .pyc 后缀的字节码文件)。你使用的该版本 qemu.spec 仅声明了 tracetool 相关的原始 .py 脚本为打包内容,未匹配自动生成的缓存文件,最终在文件列表校验阶段触发「已安装但未在 %files 中声明」的构建错误。

可用解决方法

以下方案任选其一即可,优先推荐第一种,符合 Fedora 官方打包规范:

  • 方案1:补全文件清单规则
    打开 qemu.spec,找到 %files 段中声明 tracetool 安装路径的条目,在相邻位置追加 pycache 相关的通配匹配规则:
    # 路径和你spec中tracetool的实际安装前缀保持一致,默认是如下路径
    %{_datadir}/qemu/tracetool/**/__pycache__/
    %{_datadir}/qemu/tracetool/*.pyc
    %{_datadir}/qemu/tracetool/**/*.pyc
    
    通配规则会覆盖所有层级目录下自动生成的字节码缓存文件,不会再触发文件列表校验报错。
  • 方案2:安装阶段删除冗余缓存
    如果不需要 Python 字节码缓存,可以在 spec 的 %install 段所有安装指令执行完成后,追加命令直接删除 buildroot 内生成的所有 pycache 内容:
    find %{buildroot} -type d -name "__pycache__" -exec rm -rf {} \;
    find %{buildroot} -type f -name "*.pyc" -delete
    
  • 方案3:全局关闭自动字节码编译
    在 spec 文件头部的全局变量定义区域,添加配置关闭 RPM 的自动 Python 字节码编译逻辑:
    %global __brp_python_bytecompile 0
    
    该方案会导致包内所有 Python 脚本都不预生成字节码,运行时会产生额外的首次编译开销,不符合 Fedora 打包规范,非特殊场景不建议使用。
验证方式

修改 spec 后重新执行 RPM 构建流程,待流程走到 Processing files 校验阶段时,不再出现 tracetool 相关的未打包文件报错即为修复成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:18:33