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 and uv support editable installs via the -e flag.
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 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 introduced a standardized approach to editable installs that modern build backends can implement. Before PEP 660, editable installs were only available through setuptools’ setup.py develop command. The PEP decoupled this workflow from setuptools, allowing backends like Hatch and Flit 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.