pip-tools
pip-tools is a set of command-line tools, primarily `pip-compile` and `pip-sync`, designed to help manage Python project dependencies by pinning them to exact versions. It aims to ensure deterministic and reproducible builds by generating fully-pinned `requirements.txt` files from abstract `requirements.in` files (or `pyproject.toml`). The library is currently at version 7.5.3 and actively maintained, though its release cadence can sometimes be irregular, with recent updates catching up after periods of inactivity.
Warnings
- breaking pip-tools 7.5.x and later versions have dropped support for Python 3.8. Projects still using Python 3.8 will need to use an older version of pip-tools or upgrade their Python version.
- gotcha `pip-compile` by default will not update packages if the existing `requirements.txt` file already fulfills the dependencies specified in `requirements.in`. This means simply re-running `pip-compile` won't update to newer versions.
- gotcha `pip-sync` will aggressively synchronize the active virtual environment to exactly match the `requirements.txt` file. This means any packages present in the environment but not listed in `requirements.txt` will be uninstalled.
- gotcha Due to rapid development in `pip` itself, `pip-tools` can sometimes experience temporary incompatibilities with the latest `pip` versions (e.g., `pip` 25.3 caused issues with `pip-tools > 7.5.0`). While `pip-tools` maintainers work to catch up, this can lead to build failures.
- gotcha For new Python projects, `uv` is being actively recommended by external sources as a faster, drop-in replacement for `pip-tools`' `pip-compile` and `pip-sync` functionalities.
Install
-
pip install pip-tools
Imports
- pip-tools CLI
pip-compile requirements.in
Quickstart
# 1. Create your input file (e.g., requirements.in) # requirements.in # requests # black~=23.0 # 2. Compile your requirements to a pinned requirements.txt pip-compile requirements.in # The above generates a requirements.txt like: # # # # This file is autogenerated by pip-compile # # To update, run: # # # # pip-compile requirements.in # # # black==23.12.1 # via -r requirements.in # certifi==2024.2.2 # via requests # charset-normalizer==3.3.2 # via requests # click==8.1.7 # via black # idna==3.6 # via requests # mypy-extensions==1.0.0 # via black # packaging==23.2 # via black # pathspec==0.12.1 # via black # platformdirs==4.1.0 # via black # requests==2.31.0 # via -r requirements.in # urllib3==2.2.1 # via requests # 3. Synchronize your virtual environment to match requirements.txt pip-sync requirements.txt