The executable that runs your code owns its own import paths and environment.
ModuleNotFoundError After pip Install? Check the Python/Pip Mismatch First
If pip says the package installed but Python still raises ModuleNotFoundError, the package is often installed into a different Python environment. Identify the interpreter that raises the error before reinstalling anything.
Ask the running Python for its own executable path.
This is stronger evidence than guessing from an installer name. If your script is launched with the plain python command, this tells us which interpreter is actually running it.
python -c "import sys; print(sys.executable)"read-onlyDoes this Python have a working pip module?
python -m pip is useful here because it asks the exact Python interpreter you just identified to run its pip module. A standalone pip shortcut can point somewhere else.
python -m pip --versionread-onlyWas the package installed through this same interpreter?
If you used plain pip install ..., another Python or virtual environment may have owned that shortcut. For this diagnosis, the safe rule is to bind the install to the interpreter that runs your code.
python -m pip install <distribution-name>changes this Python environmentRun the same script/import again with the same Python.
Do not switch terminals or IDEs for this verification. We want one controlled test: same interpreter, package installed through that interpreter, same original import.
Check the package's official docs for the name used after import.
Python packaging uses “package” for two related but different things: a distribution installed by pip and an import package/module used by Python code. They can have different names. If the project's official docs show a different import name, use that documented import and retest.
Does the documented import work in the same interpreter now?

The package is now installed in the Python that actually runs your code. 😎
The fix was environment alignment, not repeated global installs.

The installed distribution and the import name were different.
You did not need another installation. You needed the import name documented by the project.

The common interpreter and import-name causes are ruled out.
The remaining cause could involve a virtual environment, package extras, project layout, a local file shadowing a module, an IDE-specific interpreter, or a package that does not expose the import you expect. Do not copy folders manually into site-packages.
This path cannot safely infer another tool's Python environment.
Jupyter, PyCharm, Conda, WSL and other environments may use their own interpreter-selection rules. Identify the interpreter inside that tool before applying this Windows terminal workflow.
Successful installation only proves that one pip installed into one environment.
If your machine has multiple Python runtimes or virtual environments, a plain pip command can belong to a different interpreter than the python command that runs your script. That is why this journey asks the failing Python for sys.executable and then uses python -m pip. The package installation and the import test are now tied to the same interpreter instead of two shortcuts that merely look related.
python -m pip binds pip to that interpreter instead of trusting a generic shortcut.
The name installed from PyPI and the name used in Python source can differ.
Isolation is a feature, not a bug.
Virtual environments intentionally keep packages separate from other Python environments. Installing a dependency globally does not make it automatically available inside a project's virtual environment, and installing inside one project environment does not make it available everywhere. If your project uses .venv or another environment, the important question is whether the code and pip are operating inside the same intended environment.
Interpreter-bound installation and packaging terminology.
Package installed, but a notebook still cannot import it?
The notebook may be running a different Python environment. Use the Jupyter kernel/interpreter fix to compare the kernel executable with the environment where pip installed the package.