There might be several reasons for getting ModuleNotFoundError in Python. This article describes solutions for ModuleNotFoundError. Common causes of ModuleNotFoundError are:
- Python module is not installed
- Conflict between package and module names
- Dependency conflict between Python modules
Python module is not installed
The first thing you should check is whether the Python module is installed. To use a module in your Python program, you should first install it. For instance, if you try to use numpy
module without installing it using pip install
command, you will get the following error.
Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'numpy'
To install the required module, you can use the following command:
pip install numpy
or
pip3 install numpy
or, if you are using Anaconda, you can use the following command:
conda install numpy
Please note that there might be multiple Python instances (or virtual environments) installed on your system. Make sure that the required module is installed to the correct Python instance.
Conflict between package and module names
Another cause for ModuleNotFoundError is a conflict between package and module names. Consider you have the following directory structure in your Python project:
demo-project └───utils __init__.py string_utils.py utils.py
If you use the following import statement in utils.py
file, Python will give ModuleNotFoundError.
import utils.string_utils
Traceback (most recent call last):
File "C:\demo-project\utils\utils.py", line 1, in
import utils.string_utils
ModuleNotFoundError: No module named 'utils.string_utils';
'utils' is not a package
In the error message, it tells “utils is not a package”. utils
is a package name, but it is also a module name (utils.py
). This is the cause of confusion, module name shadows the package name. To resolve the conflict, you can rename the file utils.py
to something else.
Dependency conflict between Python modules
Sometimes there might be a conflict between Python modules and this conflict can cause ModuleNotFoundError.
In the error message below, it clearly tells that _numpy_compat.py file in scipy
library is trying to import numpy.testing.nosetester
module.
Traceback (most recent call last): File "C:\Users\admin\PycharmProjects\demo-project\venv\ Lib\site-packages\scipy\_lib\_numpy_compat.py", line 10, in from numpy.testing.nosetester import import_nose ModuleNotFoundError: No module named 'numpy.testing.nosetester'
ModuleNotFoundError is thrown because numpy.testing.nosetester
module is removed from numpy library in v1.18. To solve this problem, you can update numpy and scipy libraries to their most recent versions.
pip install numpy --upgrade pip install scipy --upgrade