安装Python 3.12后使用pip安装库出现异常,求原因
问题描述
在Ubuntu 22.04系统中通过PPA仓库ppa:deadsnakes/ppa安装了Python 3.12,基础功能正常,但执行命令python3.12 -m pip install somelibrary安装第三方库时,出现如下错误:
ERROR: Exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 165, in exc_logging_wrapper status = run_func(*args) ^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 205, in wrapper return func(self, options, args) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 285, in run session = self.get_default_session(options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 75, in get_default_session self._session = self.enter_context(self._build_session(options)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 89, in _build_session session = PipSession( ^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/network/session.py", line 282, in __init__ self.headers["User-Agent"] = user_agent() ^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/network/session.py", line 157, in user_agent setuptools_dist = get_default_environment().get_distribution("setuptools") ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pip/_internal/metadata/__init__.py", line 24, in get_default_environment from .pkg_resources import Environment File "/usr/lib/python3/dist-packages/pip/_internal/metadata/pkg_resources.py", line 9, in <module> from pip._vendor import pkg_resources File "/usr/lib/python3/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2164, in <module> register_finder(pkgutil.ImpImporter, find_on_path) ^^^^^^^^^^^^^^^^^^^ AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
补充说明:使用venv虚拟环境时无此问题,推测pip调用了/usr/lib/python3而非/usr/lib/python3.12的内容。
问题原因
- API兼容性冲突:Python 3.12已移除
pkgutil.ImpImporter这个旧API,但你当前调用的是系统全局的旧版本pip(位于/usr/lib/python3/dist-packages),它依赖的pkg_resources库仍在使用该已被移除的属性,因此触发AttributeError。 - pip调用路径错误:通过
ppa:deadsnakes/ppa安装的Python 3.12默认不会在全局环境中配置适配自身版本的pip,执行python3.12 -m pip时,系统会从全局模块路径中优先找到适配系统原生旧版Python的pip,而非Python 3.12专属的pip。 - 虚拟环境正常的原因:创建venv虚拟环境时,会自动为当前Python版本安装适配的pip和setuptools,这些工具是针对Python 3.12的API编写的,不会使用已被移除的
ImpImporter,因此可以正常工作。
内容的提问来源于stack exchange,提问作者bin4ry
相关产品推荐
相关产品推荐

