Python3.11中requests库namedtuple与Mapping导入错误求助
Python 3.11环境下Discord机器人requests导入错误解决
问题背景
在Python 3.11环境运行自制Discord机器人时,遭遇requests库导入错误。初始错误提示:
ImportError: cannot import name 'Mapping' from 'collections'
尝试将导入语句从from collections import namedtuple, Mapping改为from collections.abc import namedtuple, Mapping后,问题未解决,反而触发新错误,完整回溯信息如下:
Traceback (most recent call last): File "E:\python projects\newer Vorpal\main.py", line 4, in <module> from game import game, shopping File "E:\python projects\newer Vorpal\game.py", line 10, in <module> from monsters import createmonsters File "E:\python projects\newer Vorpal\monsters.py", line 2, in <module> import requests File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\__init__.py", line 43, in <module> import urllib3 File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\__init__.py", line 8, in <module> from .connectionpool import ( File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 29, in <module> from .connection import ( File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 39, in <module> from .util.ssl_ import ( File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\__init__.py", line 3, in <module> from .connection import is_connection_dropped File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\connection.py", line 3, in <module> from .wait import wait_for_read File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\wait.py", line 1, in <module> from .selectors import ( File "C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\selectors.py", line 14, in <module> from collections.abc import namedtuple, Mapping ImportError: cannot import name 'namedtuple' from 'collections.abc' (C:\Users\andreas\AppData\Local\Programs\Python\Python311\Lib\collections\abc.py)
解决方案
1. 修正本地代码的导入语句
Python 3.10+版本中,Mapping抽象类已从collections模块迁移至collections.abc,但namedtuple仍保留在collections模块中。你之前的修改错误地将两者都移到collections.abc导入,导致新错误。正确写法为:
from collections import namedtuple from collections.abc import Mapping
2. 升级第三方库适配Python 3.11
如果错误来自第三方库(如回溯中的urllib3),说明当前安装的urllib3/requests版本不兼容Python 3.11。执行以下命令升级到最新兼容版本:
pip install --upgrade urllib3 requests
内容的提问来源于stack exchange,提问作者AJMullen
相关产品推荐
相关产品推荐

