# What Is an Editable Install?

An editable install (also called a "development install") installs a Python package so that changes to the source code are immediately reflected in the environment without requiring reinstallation. This creates a live link between the package's source code and the Python environment where it's installed. Both [pip](https://pydevtools.com/handbook/reference/pip.md) and [uv](https://pydevtools.com/handbook/reference/uv.md) support editable installs via the `-e` flag.

{{< callout type="info" >}}
Editable installs are primarily used during package development when you frequently modify the code and test changes. They are not typically used in production environments.
{{< /callout >}}

## How Editable Installs Work

Editable installs let you skip the reinstall cycle: every change to your source code takes effect the next time you import the package. Your IDE can also find and interact with the actual source files.

Under the hood, an editable install places a special `.pth` file in your Python environment's `site-packages` directory instead of copying the package files there. That `.pth` file points Python's import system to your development directory containing the source code.

One caveat: compiled extensions are not automatically rebuilt when you change their source. You still need to recompile those manually.

## Limitations and Considerations

Editable installs have some limitations to keep in mind:

- Not all [build backends](https://pydevtools.com/handbook/explanation/what-is-a-build-backend.md) support editable installs
- Compiled extensions require manual recompilation
- Editable installs can be fragile if source files are moved
- Some package features (like data files) may behave differently

## Modern Editable Installs

[PEP 660](https://pydevtools.com/handbook/explanation/what-is-pep-660.md) introduced a standardized approach to editable installs that modern build backends can implement. Before PEP 660, editable installs were only available through [setuptools](https://pydevtools.com/handbook/reference/setuptools.md)' `setup.py develop` command. The PEP decoupled this workflow from setuptools, allowing backends like [Hatch](https://pydevtools.com/handbook/reference/hatch.md) and [Flit](https://pydevtools.com/handbook/reference/flit.md) to support editable installs through a standard interface.

The implementation details vary by build backend, but the core concept remains: providing a development-friendly way to work on packages while testing them in a real Python environment.

## Learn More

* [What is PEP 660?](https://pydevtools.com/handbook/explanation/what-is-pep-660.md) covers the standard that decoupled editable installs from setuptools
* [What is a build backend?](https://pydevtools.com/handbook/explanation/what-is-a-build-backend.md) explains the systems that implement editable installs
* [PEP 660 — Editable installs for pyproject.toml based builds](https://peps.python.org/pep-0660/)
