D:\Python\bag\Image-Classification-PyTorch-main\venv\Scripts\python.exe D:/Python/bag/Image-Classification-PyTorch-main/main.py Traceback (most recent call last): File "D:/Python/bag/Image-Classification-PyTorch-main/main.py", line 7, in <module> from convNet import CNN File "D:\Python\bag\Image-Classification-PyTorch-main\convNet.py", line 8, in <module> import torchvision File "D:\Python\bag\Image-Classification-PyTorch-main\venv\lib\site-packages\torchvision\__init__.py", line 7, in <module> from torchvision import datasets File "D:\Python\bag\Image-Classification-PyTorch-main\venv\lib\site-packages\torchvision\datasets\__init__.py", line 1, in <module> from .lsun import LSUN, LSUNClass File "D:\Python\bag\Image-Classification-PyTorch-main\venv\lib\site-packages\torchvision\datasets\lsun.py", line 2, in <module> from PIL import Image File "D:\Python\bag\Image-Classification-PyTorch-main\venv\lib\site-packages\PIL\Image.py", line 68, in <module> from ._typing import StrOrBytesPath, TypeGuard File "D:\Python\bag\Image-Classification-PyTorch-main\venv\lib\site-packages\PIL\_typing.py", line 10, in <module> NumpyArray = npt.NDArray[Any] AttributeError: module 'numpy.typing' has no attribute 'NDArray' Process finished with exit code 1
首先,错误发生在PIL的_typing.py文件中,这里尝试导入numpy.typing的NDArray,但失败了。可能的原因是numpy的版本问题。因为NDArray是在numpy 1.20版本之后才引入的,如果用户安装的是旧版的numpy,就会找不到这个属性。
接下来,用户的环境是使用虚拟环境venv,所以需要检查这个环境中安装的numpy版本。用户可能需要升级numpy到最新版,或者至少1.20以上。另外,还要考虑Pillow库的版本是否兼容当前的numpy版本。可能Pillow的某个版本依赖较高版本的numpy,而用户的环境中numpy版本过低。
解决方法应该是先尝试升级numpy,使用pip install --upgrade numpy。如果问题依旧,可能需要检查Pillow的版本,或者重新安装torchvision和torch,因为它们可能对numpy有版本依赖。此外,如果虚拟环境之前安装的包有冲突,可能需要重新创建虚拟环境,并安装正确版本的依赖。
用户可能不太清楚如何检查已安装的版本,可以指导他们使用pip list命令查看numpy和Pillow的版本。另外,提醒用户确保虚拟环境已激活,避免在全局环境中操作。如果升级numpy后问题解决,那最好;如果还存在问题,可能需要更彻底的依赖管理,比如使用requirements.txt或重新配置环境。这个错误是由于numpy版本不兼容导致的。让我们逐步分析问题原因和解决方案:
$\boxed{问题分析}$
- 错误核心:
AttributeError: module 'numpy.typing' has no attribute 'NDArray'
- 直接原因:安装的numpy版本过旧(低于1.20),不支持
numpy.typing.NDArray
类型提示 - 依赖关系:Pillow库的
_typing.py
需要较新的numpy版本支持
$\boxed{解决方案}$ 按顺序尝试以下步骤:
$\boxed{步骤1}$ 升级numpy包
# 在激活的虚拟环境中执行(注意路径中的venv)
D:\Python\bag\Image-Classification-PyTorch-main\venv\Scripts\python.exe -m pip install --upgrade numpy
$\boxed{步骤2}$ 验证numpy版本
D:\Python\bag\Image-Classification-PyTorch-main\venv\Scripts\python.exe -c "import numpy; print(numpy.__version__)"
# 需要 >=1.20.0 的版本
$\boxed{步骤3}$ 重新安装关联包(若升级无效)
D:\Python\bag\Image-Classification-PyTorch-main\venv\Scripts\python.exe -m pip install --force-reinstall pillow torchvision torch
$\boxed{补充建议}$
检查项目是否包含
requirements.txt
文件,使用指定版本安装:D:\Python\bag\Image-Classification-PyTorch-main\venv\Scripts\python.exe -m pip install -r requirements.txt
若问题持续,建议重建虚拟环境:
# 删除旧环境 rm -r D:\Python\bag\Image-Classification-PyTorch-main\venv # 创建新环境 python -m venv D:\Python\bag\Image-Classification-PyTorch-main\venv
$\boxed{版本兼容性参考表}$
包名称 | 最低要求版本 | 推荐版本 |
---|---|---|
numpy | 1.20.0 | >=1.22.4 |
Pillow | 8.4.0 | >=9.0.0 |
torch | 1.10.0 | >=2.0.0 |
$\boxed{原理解释}$
该错误源于numpy在1.20版本中引入了标准化的类型注解系统。当代码尝试使用numpy.typing.NDArray
时,旧版本numpy无法识别这个类型定义。通过升级numpy包,可以使Pillow库正确访问新的类型系统接口。
相关推荐



















