导入boto3时报ImportError:无法从botocore.compat导入OrderedDict
错误触发原因
该错误由两个叠加问题导致:
- 依赖库和Python版本不兼容:你使用的是Python 3.6版本,当前环境安装的boto3、botocore、urllib3版本过高,这些库的高版本已经正式停止对Python 3.6的支持。其中高版本botocore移除了
botocore.compat.OrderedDict这个兼容导出项,所以触发导入错误。 - 自定义文件和标准库模块重名导致循环导入:错误栈显示导入queue模块时优先加载了你本地的
/home/gti/pysys/req_static/queue.py文件,该文件内部又导入了botocore.config.Config,而botocore初始化过程中需要依赖queue模块,形成了循环导入,进一步放大了依赖加载异常。
可行解决方法
- 方法1:降级依赖库到支持Python 3.6的版本
直接执行以下命令安装兼容版本即可:
pip install boto3==1.18.* botocore==1.21.* urllib3==1.26.*
以上版本是官方明确支持Python 3.6的最后迭代版本,不会出现兼容性问题。
- 方法2:修改本地重名文件
把你本地的/home/gti/pysys/req_static/queue.py改名,比如改成my_queue.py,避免和标准库模块重名导致导入路径混乱。 - 方法3:升级Python版本(长期推荐)
如果业务允许,直接升级Python到3.7及以上版本,安装最新版的boto3即可正常使用,也能避免更多旧版本Python的兼容性漏洞。
内容的提问来源于stack exchange,提问作者THAVASI.T
相关产品推荐
相关产品推荐

