AttributeError:模块“pkgutil”没有属性“ImpImporter”。您的意思是“zipimporter”吗?
- 2025-01-09 08:46:00
- admin 原创
- 23
问题描述:
之前我安装了一些软件包,比如Matplotlib、NumPy、 pip (版本 23.3.1)、 wheel (版本 0.41.2) 等,并用它们进行了一些编程。我使用命令C:UsersUserName>pip list
查找已安装的软件包列表,我使用的是 Python 3.12.0(通过使用代码C:UsersUserName>py -V
)。
我需要使用pyspedas来分析一些数据。我按照从网站收到的说明安装该软件包,但有一个变化(我不确定这是否重要:我使用的是py
,而不是python
)。我使用的命令顺序如下:
py -m venv pyspedas
.pyspedasScriptsactivate
pip install pyspedas
完成最后一步后,我得到了以下输出:
Collecting pyspedas
Using cached pyspedas-1.4.47-py3-none-any.whl.metadata (14 kB)
Collecting numpy>=1.19.5 (from pyspedas)
Using cached numpy-1.26.1-cp312-cp312-win_amd64.whl.metadata (61 kB)
Collecting requests (from pyspedas)
Using cached requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)
Collecting geopack>=1.0.10 (from pyspedas)
Using cached geopack-1.0.10-py3-none-any.whl (114 kB)
Collecting cdflib<1.0.0 (from pyspedas)
Using cached cdflib-0.4.9-py3-none-any.whl (72 kB)
Collecting cdasws>=1.7.24 (from pyspedas)
Using cached cdasws-1.7.43.tar.gz (21 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
Collecting netCDF4>=1.6.2 (from pyspedas)
Using cached netCDF4-1.6.5-cp312-cp312-win_amd64.whl.metadata (1.8 kB)
Collecting pywavelets (from pyspedas)
Using cached PyWavelets-1.4.1.tar.gz (4.6 MB)
Installing build dependencies ... done
Getting requirements to build wheel ... error
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [33 lines of output]
Traceback (most recent call last):
File "C:UsersUserNamepyspedasLibsite-packagespip_vendorpyproject_hooks_in_process_in_process.py", line 353, in <module>
main()
File "C:UsersUserNamepyspedasLibsite-packagespip_vendorpyproject_hooks_in_process_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:UsersUserNamepyspedasLibsite-packagespip_vendorpyproject_hooks_in_process_in_process.py", line 112, in get_requires_for_build_wheel
backend = _build_backend()
^^^^^^^^^^^^^^^^
File "C:UsersUserNamepyspedasLibsite-packagespip_vendorpyproject_hooks_in_process_in_process.py", line 77, in _build_backend
obj = import_module(mod_path)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:UsersUserNameAppDataLocalProgramsPythonPython312Libimportlib__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1381, in _gcd_import
File "<frozen importlib._bootstrap>", line 1354, in _find_and_load
File "<frozen importlib._bootstrap>", line 1304, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1381, in _gcd_import
File "<frozen importlib._bootstrap>", line 1354, in _find_and_load
File "<frozen importlib._bootstrap>", line 1325, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 929, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 994, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "C:UsersUserNameAppDataLocalTemppip-build-env-_lgbq70yoverlayLibsite-packagessetuptools__init__.py", line 16, in <module>
import setuptools.version
File "C:UsersUserNameAppDataLocalTemppip-build-env-_lgbq70yoverlayLibsite-packagessetuptoolsersion.py", line 1, in <module>
import pkg_resources
File "C:UsersUserNameAppDataLocalTemppip-build-env-_lgbq70yoverlayLibsite-packagespkg_resources__init__.py", line 2191, in <module>
register_finder(pkgutil.ImpImporter, find_on_path)
^^^^^^^^^^^^^^^^^^^
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
经过一番谷歌搜索,我发现这个问题在多个地方都有报告,但没有一个是针对这个包的。我确实按照这里的答案在新环境中安装了 wheel ,但问题仍然存在。
我没有设置虚拟环境,而是直接执行了命令py -m pip install pyspedas
。但仍然出现错误。
据我所知,该程序存在一个问题
Collecting pywavelets (from pyspedas)
Using cached PyWavelets-1.4.1.tar.gz (4.6 MB)
Installing build dependencies ... done
我在 Windows 11 中使用IDLE。
解决方案 1:
由于删除了长期弃用的 pkgutil.ImpImporter 类,pip 命令可能不适用于Python 3.12
。
你只需手动安装 pip for Python 3.12
python -m ensurepip --upgrade
python -m pip install --upgrade setuptools
python -m pip install <module>
在您的虚拟环境中:
pip install --upgrade setuptools
Python自带了ensurepip
,可以在Python环境中安装pip。
https://pip.pypa.io/en/stable/installation/
在Linux/macOS终端上:
python -m ensurepip --upgrade
在Windows上:
py -m ensurepip --upgrade
另外,请确保升级 pip:
py -m pip install --upgrade pip
要在 Python 3.12 上安装 numpy,必须使用 numpy 版本 1.26.4
pip install numpy==1.26.4
https://github.com/numpy/numpy/issues/23808#issuecomment-1722440746
对于 Ubuntu
sudo apt install python3.12-dev
或者
python3.12 -m pip install --upgrade setuptools
解决方案 2:
我的问题是在 requirements.txt 中列出了旧版本的NumPy,这可能是一个显而易见的问题,但对于那些陷入困境的人来说:
检查NumPy 的较新版本。我需要将其列为:
numpy~=1.26.4
解决方案 3:
Python 已删除 中的一些以前弃用的符号。这在Python 3.12 发行说明importlib
中有所提及
importlib 中许多以前弃用的清理工作现已完成:
...
importlib.abc.Finder
、pkgutil.ImpImporter
和pkgutil.ImpLoader
已被删除。(由 Barry Warsaw 在gh-98040中贡献。)
错误消息意味着某些东西试图pkgutil.ImpImporter
在软件包安装期间使用已删除的内容。这个东西可能是 pip、setuptools 或setup.py
软件包本身的安装脚本。查看堆栈跟踪,升级setuptools
(如果使用虚拟环境,则在虚拟环境中)应该可以解决此问题。
另请注意 3.12 中的相关发行说明条目
gh-95299:不要在使用 venv 创建的虚拟环境中预安装 setuptools。这意味着 distutils、setuptools、pkg_resources 和 easy_install 将不再默认可用;要访问这些,请
pip install setuptools
在激活的虚拟环境中运行。
解决方案 4:
正如其他人所评论的,问题是 Python 3.12 与 pip 的版本不兼容。
我最初的解决方案是:
python -m ensurepip --upgrade
pip3.12 install ...
想要安装的包在哪里...?
这是一个不完整的解决方案,因为我的 IDE(PyCharm)在打开其他文件时仍然会抛出同样的错误。
以下代码全局升级了 pip 版本
py -m pip install --upgrade pip
然后我刷新了我的 IDE。目前它正在运行。
进一步更新:我已经开始使用 conda 环境。
解决方案 5:
在Ubuntu 22.04 (Jammy Jellyfish)上对我有用的是安装 Python 3.12 的开发头文件。
sudo apt install python3.12-dev
此后,一切都很顺利。
其他一切都对我不起作用,因为在现有的 Python 3.12 虚拟环境中升级任何包都会导致同样的错误。安装后,两者python3.12-dev
都是pip
全新setuptools
的。
解决方案 6:
我最近也遇到了同样的问题,因为我刚刚在venv上安装了 3.12就遇到了这个问题。上面的一些建议对我有用。作为参考,我使用 Windows 和PyCharm进行开发。
每次我尝试在这个全新的 3.12 安装上安装包时,我都会遇到相同的属性错误。为了修复它,我做了以下操作。
从 PyCharm 内部的终端:
python -m ensurepip --upgrade
python -m pip install --upgrade setuptools
python -m pip install <module>
与以前的版本相比,我注意到的一件事是,至少无论我的设置如何,python -m
pip 的前缀现在都是强制性的,而以前我可以直接使用命令pip install <module>
。这可能是由于我的设置不同,也可能是由于 3.12 强制执行...
解决方案 7:
对我来说,最简单的解决方案仍然是使用 Python 3.10。该项目是使用此版本的 Python 编写的,在出现此问题之前,至少还有另一个问题需要解决。
解决方案 8:
我最近也遇到了同样的问题,因为我刚刚安装了 3.12。这个解决方案对我有用。因为我的依赖包中有一个旧版本的 pandas,所以我只需要更新 Pandas 版本,因为它与 Python 3.12 不兼容,一切运行顺利
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件