You need to enable JavaScript to run this app. Fedora 32升级至33后dnf失效 提示缺少dnf Python模块
优惠活动
大模型
产品
解决方案
定价
更多

Fedora 32升级至33后dnf失效 提示缺少dnf Python模块

故障场景

按照dnf系统升级官方手册流程,将Fedora 32升级至Fedora 33并重启后,执行dnf check-update命令抛出如下错误:

Traceback (most recent call last):
  File "/usr/bin/dnf", line 57, in <module>
    from dnf.cli import main
ModuleNotFoundError: No module named 'dnf'

已排查的信息

  • 执行rpm -qa python3的返回结果包含两个版本的Python3安装包:
    python3-3.9.1-2.fc33.x86_64
    python3-3.8.7-2.fc32.x86_64
    
    可确认跨版本升级后,Fedora 32对应的旧版Python3包未被系统自动替换清理,通过rpm -qa | sort的输出可交叉验证该残留情况。
  • 执行rpm -ql python3-3.8.7-2.fc32.x86_64查看旧包的文件占用列表,发现该残留包将系统默认python3命令的入口路径纳入自身安装文件范围,涉及路径包括:
    /usr/bin/pydoc
    /usr/bin/pydoc3
    /usr/bin/pydoc3.8
    /usr/bin/python3
    /usr/bin/python3.8
    /usr/lib/.build-id
    /usr/lib/.build-id/da
    /usr/lib/.build-id/da/2e3a5d2a850e1b6e560df11fa5d61a7192f954
    /usr/share/doc/python3
    /usr/share/doc/python3/README.rst
    /usr/share/man/man1/python3.1.gz
    /usr/share/man/man1/python3.8.1.gz
    
  • 排查过程中曾误将包名作为直接命令执行(未添加rpm -ql查询参数),执行python3-3.8.7-2.fc33.x86_6时报错error: open of python3-3.8.7-2.fc33.x86_6 failed: No such file or directory,属于操作失误,不影响故障判断。
故障根因

残留的Fedora 32版Python 3.8包抢占了/usr/bin/python3的系统默认指向,而Fedora 33版本的dnf工具是绑定Python 3.9环境开发的,当前执行dnf脚本时会自动调用指向旧版本的Python3解释器,自然无法找到安装在Python 3.9模块路径下的dnf组件。

修复步骤
  1. 移除残留的旧版Python3包
    由于rpm是独立二进制程序,不依赖当前python3的指向,可直接执行卸载命令清理残留包,添加--nodeps参数避免依赖关系错乱导致的卸载失败:
    rpm -e --nodeps python3-3.8.7-2.fc32.x86_64
    
  2. 重建默认python3软链接
    旧包卸载完成后,原本被旧包占用的/usr/bin/python3路径会被一同删除,此时手动建立指向系统新版Python3.9的软链接:
    ln -sf /usr/bin/python3.9 /usr/bin/python3
    
  3. 验证并收尾
    链接修复完成后,执行dnf check-update确认dnf可正常加载模块、无报错运行。验证通过后,可通过rpm -qa | grep fc32检索所有跨版本升级残留的fc32标签软件包,批量完成清理后重新拉取系统仓库元数据,确保所有包版本与Fedora 33源匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 03:06:05