原文: ModuleNotFoundError: no module named Python Error [Fixed]
当你在一个 Python 文件中导入一个模块时,Python 试图通过几种方式来处理这个模块。有时,Python 会在之后抛出 ModuleNotFoundError。这个错误在 Python 中是什么意思?
顾名思义,当你试图访问或使用一个找不到的模块时就会发生这个错误。以标题为例,找不到“名为 Python 的模块”。
这里的 Python 可以是任何模块。当我试图导入一个找不到的 numpys
模块时,会出现下面这个错误:
import numpys as np
错误是这样的:
以下是一些可能找不到模块的原因:
- 你的电脑上没有安装你想导入的模块
- 你对模块的拼写不正确(这仍然与前一点有关,即拼写错误的模块没有安装)......例如,在导入时将
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'
由于大小写的不同,numpy
和 Numpy
是不同的模块。你可以通过用正确的大小写拼写模块来解决这个错误。
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。
有时你没有安装那个模块,所以你必须安装它。有时是模块拼写错误,或命名时用了错误的大小写,或路径错误。在这篇文章中,我展示了如果你遇到这种错误的四种可能的修复方法。
我希望你能从文章中得到启发:)