首页 > 编程问答 >“ModuleNotFoundError:没有名为‘numpy.typing’的模块”

“ModuleNotFoundError:没有名为‘numpy.typing’的模块”

时间:2024-07-29 03:47:30浏览次数:8  
标签:python numpy python-typing

我正在尝试导入 ArrayLike doing from numpy.typing import ArrayLike ,并且收到标题中提到的错误:

ModuleNotFoundError: No module named 'numpy.typing'

我知道我可以简单地编写 import numpy.typing as npt 如文档所示,但我想要简单性只是导入我想要使用的类型。这也不是我第一次遇到这种情况:我想导入特定的方法/类,但我被迫使用昵称导入父模块,否则我会收到错误。为什么?


遇到的错误“ModuleNotFoundError: No module named 'numpy.typing'”表示使用的 NumPy 版本低于 1.20。 numpy.typing 模块是在 NumPy 1.20 版本中引入的。

以下是一些解决此问题的方法:

1. 升级 NumPy:

这是最直接的解决方案。可以使用 pip 升级 NumPy:

bash pip install --upgrade numpy

如果使用的是 Anaconda 或 Miniconda,则可以使用 conda 升级 NumPy:

bash conda update -c conda-forge numpy

2. 如果无法升级 NumPy:

如果因为某些原因无法升级 NumPy,可以使用 typing 模块中的 Union 和 NumPy 类型来定义 ArrayLike

```python from typing import Union

import numpy as np

ArrayLike = Union[np.ndarray, list, tuple] ```

这将定义 ArrayLike np.ndarray list tuple 类型的并集。

3. 使用 __future__.annotations

从 Python 3.7 开始,可以使用 __future__.annotations 来推迟类型注释的评估。这意味着无需在运行时导入 numpy.typing

```python from future import annotations

def my_function(x: "numpy.typing.ArrayLike"): # ... your code here ...

# 现在可以直接使用 numpy.typing.ArrayLike ,而无需导入它 ```

请注意,这只在 Python 3.7 及更高版本中有效。

至于提到的为什么不能直接导入特定方法/类,这是因为 Python 的模块系统旨在避免循环依赖和命名空间冲突。通过强制导入父模块,Python 确保了模块之间的清晰依赖关系,并避免了命名空间中可能出现的冲突。

如果发现自己经常使用某个模块中的特定方法/类,可以考虑使用 from ... import ... as ... 语法为其创建一个更短的别名,以提高代码的可读性。

标签:python,numpy,python-typing
From: 67117848

相关文章