原文: ModuleNotFoundError: no module named Python Error [Fixed]

当你在一个 Python 文件中导入一个模块时,Python 试图通过几种方式来处理这个模块。有时,Python 会在之后抛出 ModuleNotFoundError。这个错误在 Python 中是什么意思?

顾名思义,当你试图访问或使用一个找不到的模块时就会发生这个错误。以标题为例,找不到“名为 Python 的模块”。

这里的 Python 可以是任何模块。当我试图导入一个找不到的 numpys 模块时,会出现下面这个错误:

import numpys as np

错误是这样的:

image-341

以下是一些可能找不到模块的原因:

  • 你的电脑上没有安装你想导入的模块
  • 你对模块的拼写不正确(这仍然与前一点有关,即拼写错误的模块没有安装)......例如,在导入时将 numpy 拼成 numpys
  • 你对一个模块使用了不正确的大小写(这仍然与第一点有关)......例如,在导入过程中把 numpy 拼成 NumPy,就会出现找不到模块的错误,因为这两个模块是不一样的
  • 你使用错误的路径导入了一个模块

如何解决 Python 中的 ModuleNotFoundError 问题

正如我在上一节中提到的,有几个原因可能导致找不到模块。下面是一些解决方案。

1.确保导入的模块已经安装

numpy 为例。你在你的代码中,在一个叫作 “test.py” 的文件中使用这个模块,像这样:

import numpy as np

arr = np.array([1, 2, 3])

print(arr)

如果你试图用 python test.py 运行这段代码,会得到这个错误:

ModuleNotFoundError: No module named "numpy"

那么很有可能是你的设备上没有安装 numpy 模块。你可以这样安装该模块:

python -m pip install numpy

安装后,之前的代码将正确工作,终端将打印结果:

[1, 2, 3]

2.确保模块的拼写正确

在某些情况下,你可能已经安装了你需要的模块,但试图使用它时仍然会出现 ModuleNotFound 错误。在这种情况下,可能是你的拼写不正确。以这段代码为例:

import nompy as np

arr = np.array([1, 2, 3])

print(arr)

在这里,你已经安装了 numpy,但运行上述代码会出现这个错误:

ModuleNotFoundError: No module named "nompy"

This error comes as a result of the misspelled numpy module as nompy (with the letter o instead of u). You can fix this error by spelling the module correctly.

3. 确保模块的大小写正确

与模块未找到错误的拼写问题类似,也可能是你的模块拼写正确,但用错了大小写。这里有一个例子:

import Numpy as np

arr = np.array([1, 2, 3])

print(arr)

对于这段代码,你已经安装了 numpy,但运行上述代码会出现这个错误:

ModuleNotFoundError: No module named 'Numpy'

由于大小写的不同,numpyNumpy 是不同的模块。你可以通过用正确的大小写拼写模块来解决这个错误。

4.确保你使用正确的路径

在 Python 中,你可以使用绝对路径或相对路径从其他文件导入模块。在这个例子中,我将着重介绍绝对路径。

当你试图从错误的路径访问一个模块时,你也会得到这里找不到模块的结果。这里有一个例子:

假设你有一个名为 test 的项目文件夹。在它里面,你有两个文件夹 demoA demoB

demoA 有一个 __init__.py 文件(以显示它是一个 Python 包)和一个 test1.py 模块。

demoA 也有一个 __init__.py 文件和一个 test2.py 模块。

结构如下:

└── test
    ├── demoA
        ├── __init__.py
    │   ├── test1.py
    └── demoB
        ├── __init__.py
        ├── test2.py

这是 test1.py 的内容:

def hello():
  print("hello")

假设你想在 test2.py 中使用这个声明的 hello 函数。下面的代码将抛出一个未找到模块的错误:

import demoA.test as test1

test1.hello()

代码将抛出以下错误:

ModuleNotFoundError: No module named 'demoA.test'

其原因是我们使用了错误的路径来访问 test1 模块。正确的路径应该是 demoA.test1。当你纠正了这一点,代码就可以运行了:

import demoA.test1 as test1

test1.hello()
# hello

总结

为了处理一个导入的模块,Python 检查像内置库、已安装的模块和当前项目中的模块这样的地方。如果它不能处理这个模块,它就会抛出 ModuleNotFoundError

有时你没有安装那个模块,所以你必须安装它。有时是模块拼写错误,或命名时用了错误的大小写,或路径错误。在这篇文章中,我展示了如果你遇到这种错误的四种可能的修复方法。

我希望你能从文章中得到启发:)