How to Fix ModuleNotFoundError: No module named 'numpy' During pip Install

How to Fix ModuleNotFoundError: No module named 'numpy' During pip Install

This guide helps resolve an issue where a Python package fails to install because it cannot find numpy, even though it is already installed in your virtual environment.

Problem

You’re trying to install a Python package using:

uv pip install git+https://github.com/example/examplepkg.git
# or
pip install .

Even though numpy is installed in your environment, the install fails with:

ModuleNotFoundError: No module named 'numpy'

Why This Happens

By default, pip (and uv pip) use build isolation when installing packages that declare a build backend in pyproject.toml. This means they build the package in a temporary, isolated environment with only the dependencies listed in the [build-system] table of pyproject.toml.

If numpy is required during the build (e.g. to compile C extensions) but not listed in build-system.requires, it will not be available, leading to the error.

Solution

Use the --no-build-isolation flag to bypass the isolated environment and allow access to already-installed packages:

pip install --no-build-isolation .
# or
uv pip install --no-build-isolation git+https://github.com/example/examplepkg.git
ℹ️
This works because --no-build-isolation tells pip to use your current environment, where numpy is already installed. This avoids the problem entirely, but at the cost of potentially inconsistent builds.

Permanent Fix: Add Build Requirements

A better long-term solution is to ensure that required build dependencies like numpy are declared in pyproject.toml, following PEP 518:

[build-system]
requires = ["setuptools", "wheel", "numpy"]
build-backend = "setuptools.build_meta"

This allows pip to correctly build the package in an isolated environment with the necessary dependencies.

⚠️
Missing build requirements are a common source of install failures. Always specify required build-time packages explicitly in [build-system.requires] to ensure compatibility with modern Python packaging tools.

See Also

Last updated on

Please submit corrections and feedback...