Python 3.12 下运行 OpenMMLab 的 MIM 工具报错的原因与解决方案

目录

Python 3.12 下运行 OpenMMLab 的 MIM 工具报错的原因与解决方案

背景介绍

错误分析

🔥 根本原因:

推荐解决方案:降级 Python 版本

步骤如下:

不推荐的临时方案(仅供参考)

总结

附:参考资源


Python 3.12 下运行 OpenMMLab 的 MIM 工具报错的原因与解决方案

近期在使用 Python 3.12 环境安装并运行 OpenMMLab 的 mim 工具时遇到了 pkgutil.ImpImporter 的兼容性报错。本文将深入分析该错误产生的原因,并提供一套可靠的解决方案,包括推荐的 Python 版本切换方式,帮助开发者顺利使用 OpenMMLab 工具链。

背景介绍

OpenMMLab 提供了强大的模型安装工具 —— mim(Model Installer Manager),可以快速安装如 mmenginemmsegmentation 等模块。但当我们使用 Python 3.12 环境运行如下命令:

mim install mmengine

却报出如下错误:

AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?

这让很多用户感到困惑,下面我们一步一步剖析这个问题的根源,并提供可行的解决方案。


错误分析

从报错堆栈可以看到,mim 工具在初始化时依赖了 setuptools,进而调用了 pkg_resources 模块,而 pkg_resources 又使用了如下这段代码:

register_finder(pkgutil.ImpImporter, find_on_path)

然而从 Python 3.12 开始,pkgutil.ImpImporter 被彻底移除(对应的 PEP 594,废弃老旧 API),导致上述语句运行失败。

🔥 根本原因:

  • pkg_resources 尚未兼容 Python 3.12;

  • OpenMMLab 的 mim 工具间接依赖了 pkg_resources

  • Python 3.12 不再支持 pkgutil.ImpImporter,引发 AttributeError


推荐解决方案:降级 Python 版本

目前,最稳妥的解决办法是使用 Python 3.10 或 3.11 来运行 mim 工具和 OpenMMLab 生态。

步骤如下:

  1. 创建新的 Conda 环境

conda create -n mim-env python=3.10 -y
conda activate mim-env
  1. 安装 openmim 和目标包

pip install openmim
mim install mmengine
  1. 验证安装是否成功

python -c "import mmengine; print(mmengine.__version__)"

不推荐的临时方案(仅供参考)

有些用户尝试通过 monkey-patch 的方式绕过错误:

import pkgutil
pkgutil.ImpImporter = None

虽然这能消除当前的报错,但会造成其他包运行失败,属于不安全行为。不推荐在生产环境中使用


总结

Python 3.12 的一些变更对老旧模块兼容性影响较大,特别是一些尚未更新到最新依赖的第三方工具。若你需要使用 OpenMMLab 提供的 mim 安装器,建议在 Python 3.10 或 3.11 环境下运行,这是目前最稳妥的方式。

随着社区更新,未来 pkg_resources 可能会移除对 ImpImporter 的依赖,届时 Python 3.12 才能完全兼容这些工具。


附:参考资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值