Win10+Python3.10下使用pip安装模块出现ImportError如何解决?
问题场景
64位Windows 10系统、Python 3.10环境中,pip可正常识别,但执行命令pip install customtkinter安装customtkinter模块时,出现如下报错:
Traceback (most recent call last): File "c:\users\(Username)\appdata\local\programs\python\python310\lib\runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "c:\users\(Username)\appdata\local\programs\python\python310\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "C:\Users\(Username)\AppData\Local\Programs\Python\Python310\Scripts\pip.exe\__main__.py", line 4, in <module> File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\cli\main.py", line 9, in <module> from pip._internal.cli.autocompletion import autocomplete File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\cli\autocompletion.py", line 10, in <module> from pip._internal.cli.main_parser import create_main_parser File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\cli\main_parser.py", line 9, in <module> from pip._internal.build_env import get_runnable_pip File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\build_env.py", line 19, in <module> from pip._internal.cli.spinners import open_spinner File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\cli\spinners.py", line 9, in <module> from pip._internal.utils.logging import get_indentation File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\utils\logging.py", line 29, in <module> from pip._internal.utils.misc import ensure_dir File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\utils\misc.py", line 42, in <module> from pip._internal.exceptions import CommandError, ExternallyManagedEnvironment File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_internal\exceptions.py", line 18, in <module> from pip._vendor.requests.models import Request, Response File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\__init__.py", line 149, in <module> from . import packages, utils File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\packages\__init__.py", line 3, in <module> from . import urllib3 File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\packages\urllib3\__init__.py", line 10, in <module> from .connectionpool import ( File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\packages\urllib3\connectionpool.py", line 38, in <module> from .response import HTTPResponse File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\packages\urllib3\response.py", line 5, in <module> from ._collections import HTTPHeaderDict File "c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\packages\urllib3\_collections.py", line 1, in <module> from collections import Mapping, MutableMapping ImportError: 无法从 'collections' 导入名称 'Mapping' (c:\users\(Username)\appdata\local\programs\python\python310\lib\collections\__init__.py)
问题原因
Python 3.10 版本开始,collections模块中的Mapping和MutableMapping抽象基类被迁移到了collections.abc子模块中。当前环境的pip依赖的urllib3版本过于老旧,仍在尝试从collections直接导入这些已迁移的类,导致抛出导入错误。
解决方法
方法1:手动修改报错文件
找到路径 c:\users\(Username)\appdata\local\programs\python\python310\lib\site-packages\pip\_vendor\requests\packages\urllib3\_collections.py,将文件第一行的代码:
from collections import Mapping, MutableMapping
修改为:
from collections.abc import Mapping, MutableMapping
保存文件后,重新执行pip install customtkinter即可。
方法2:升级pip到兼容版本
打开命令提示符,执行以下命令升级pip,确保其适配Python 3.10:
python -m ensurepip --upgrade
升级完成后,再运行pip install customtkinter尝试安装。
方法3:使用python -m pip执行安装命令
有时候直接调用pip可能会触发旧的脚本,改用以下命令可以确保使用当前Python环境对应的pip:
python -m pip install customtkinter
内容的提问来源于stack exchange,提问作者random dude in the internet
相关产品推荐
相关产品推荐

