NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1066 most downloaded on PyPI
pip-tools keeps your pinned dependencies fresh.
Last release 1 months ago
12 Aug 2026
Ships unpredictably
gaps range from 2 weeks to 1.4 years
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
127 releases · first in 2012
Fixed handling of index URLs ending in /simple/ by improving URL normalization logic. These URLs would previously make pip-compile fail to use the PyP
Fixed handling of index URLs ending in /simple/ by improving URL normalization logic.
These URLs would previously make pip-compile fail to use the PyPI JSON API.
-- by @sirosen
PRs and issues: #1669
Added a missing dependency on typing-extensions for Python 3.9 and 3.10 -- by @sirosen.
PRs and issues: #2424
pip-tools documentation now features a how-to section, featuring initial docs which cover controlling output file headers and configuring completion -- by @sirosen.Fixed CI triggers so that release tags won't create spurious failing runs -- by @sirosen.
PRs and issues: #2421
Refactored the bug report template for better reporting -- by @psthindal.
One column per quarter.
2026-08-11
Fixed handling of index URLs ending in /simple/ by improving URL normalization
logic.
These URLs would previously make pip-compile fail to use the PyPI JSON API.
-- by {user}sirosen
PRs and issues: {issue}1669
Added a missing dependency on {pypi}typing-extensions for Python 3.9 and 3.10
-- by {user}sirosen.
PRs and issues: {issue}2424
pip-tools is now compatible with pip version 26.2 -- by {user}sirosen.
PRs and issues: {issue}2436, {issue}2437
pip-tools documentation now features a how-to section, featuring initial
docs which cover controlling output file headers and configuring completion
-- by {user}sirosen.Fixed CI triggers so that release tags won't create spurious failing runs --
by {user}sirosen.
PRs and issues: {issue}2421
Refactored the bug report template for better reporting -- by {user}psthindal.
…and importlib_metadata via intersphinx, and the deprecated sphinx.util.console.bold helper is replaced with a plain logger.info call (the colour marku…
2026-07-13
The --help output for pip-compile and pip-sync commands has been extended to include usage examples -- by @Dzhud.
PRs and issues: #1142
Added --uploaded-prior-to as a passthrough option for pip-compile, allowing users to restrict package candidates to versions uploaded before a given datetime. Requires pip >= 26.0 -- by @miettal.
PRs and issues: #2288
pip-tools is now compatible with pip 26.1 -- @gaborbernat.
PRs and issues: #2379
Fixed the contents sidebar for the index doc -- by @sirosen.
PRs and issues: #2169
pip-tools now has a policy regarding LLM-generated contributions, noted in the contributing documentation -- by @sirosen.
Thanks to @0cjs, @gpshead, mr-@c, @samdoran, @webknjaz, and everyone else in the broader community who helped us to craft a policy which is considerate of contributors and protective of the project and its maintainers.
PRs and issues: #2318
pip-tools' documentation now features a section titled "Reference" covering the CLI commands and configuration. Configuration documentation has been removed from the readme.
-- by @sirosen
CI testing now runs on Intel and ARM macOS runners, and is pinned to a specific macOS version -- by @sirosen.
pip-tools now has a policy regarding LLM-generated contributions, noted in the contributing documentation -- by @sirosen.
Thanks to @0cjs, @gpshead, mr-@c, @samdoran, @webknjaz, and everyone else in the broader community who helped us to craft a policy which is considerate of contributors and protective of the project and its maintainers.
Started running {pypi}zizmor as a part of CI pipelines to improve security of how we configure GitHub Actions CI/CD -- by @webknjaz.
PRs and issues: #2327
pip-tools docs now support GitHub Flavored Markdown admonition blocks -- by @webknjaz.
PRs and issues: #2343
Coverage reporting in pip-tools now skips _t.TYPE_CHECKING blocks -- by @gaborbernat.
PRs and issues: #2386
piptools.repositories.LocalRequirementsRepository now accepts any piptools.repositories.BaseRepository subclass as its proxied repository, not only piptools.repositories.PyPIRepository -- by @gaborbernat.
PRs and issues: #2387
A handful of f-string conversions in piptools.utils and the CLI entry points in piptools.scripts.compile and piptools.scripts.sync carried a stray space before !s (e.g. f"...{value !s}..."). PEP 498 forbids the whitespace before the conversion flag and tooling differs on whether the form parses; the literals are now in canonical {value!s} shape -- by @gaborbernat.
PRs and issues: #2388
A session-scoped autouse fixture in tests/conftest.py now drops every PIP_* environment variable before any other fixture runs, so the test suite no longer flakes on contributor machines whose shell exports PIP_INDEX_URL, PIP_FIND_LINKS, PIP_TRUSTED_HOST, and the rest of the family for a corporate mirror. Tests that need a specific variable keep their function-scoped pytest:pytest.MonkeyPatch.setenv and supersede the session-level deletion -- by @gaborbernat.
PRs and issues: #2390
The Sphinx configuration now resolves cross-references for packaging, pip, click, build, and importlib_metadata via intersphinx, and the deprecated sphinx.util.console.bold helper is replaced with a plain logger.info call (the colour markup never rendered in CI logs anyway). Cross-references in docstrings that previously fell back to nitpick suppression now link to the upstream documentation -- by @gaborbernat.
PRs and issues: #2391
The Notify Codecov CI workflow job now only fails on privilege errors in the upstream project repository runs. This fixes a problem contributors face when running CI within their forks that are not filed as true Codecov-side projects.
-- by @gaborbernat and @webknjaz
PRs and issues: #2392
Fixed incorrect nitpick ignore regexes -- by @sirosen.
pip-tools CI now pins GitHub Actions versions to hashes -- by @sirosen.
pip-tools now tests against PyPy 3.11 -- by @sirosen and @webknjaz.
pip-tools's GitHub Actions config now specifies the Ubuntu and Windows runner versions used.
2026-07-13
The --help output for pip-compile and pip-sync
commands has been extended to include usage examples
-- by {user}Dzhud.
PRs and issues: {issue}1142
Added --uploaded-prior-to as a passthrough option for pip-compile, allowing
users to restrict package candidates to versions uploaded before a given
datetime. Requires pip >= 26.0 -- by {user}miettal.
PRs and issues: {issue}2288
pip-tools is now compatible with pip 26.1 -- {user}gaborbernat.
PRs and issues: {issue}2379
Fixed the contents sidebar for the index doc -- by {user}sirosen.
PRs and issues: {issue}2169
pip-tools now has a policy regarding LLM-generated contributions, noted in the
contributing documentation -- by {user}sirosen.
Thanks to {user}0cjs, {user}gpshead, {user}mr-c, {user}samdoran,
{user}webknjaz, and everyone else in the broader community who helped us
to craft a policy which is considerate of contributors and protective of the
project and its maintainers.
PRs and issues: {issue}2318
pip-tools' documentation now features a section titled "Reference" covering
the CLI commands and configuration. Configuration documentation has been removed
from the readme.
-- by {user}sirosen
CI testing now runs on Intel and ARM macOS runners, and is pinned to a specific
macOS version -- by {user}sirosen.
PRs and issues: {issue}2079, {issue}2132, {issue}2348
pip-tools now has a policy regarding LLM-generated contributions, noted in the
contributing documentation -- by {user}sirosen.
Thanks to {user}0cjs, {user}gpshead, {user}mr-c, {user}samdoran,
{user}webknjaz, and everyone else in the broader community who helped us
to craft a policy which is considerate of contributors and protective of the
project and its maintainers.
PRs and issues: {issue}2278, {issue}2318
Started running {pypi}zizmor as a part of CI pipelines to improve
security of how we configure GitHub Actions CI/CD
-- by {user}webknjaz.
PRs and issues: {issue}2327
pip-tools docs now support GitHub Flavored Markdown admonition blocks
-- by {user}webknjaz.
PRs and issues: {issue}2343
Coverage reporting in pip-tools now skips _t.TYPE_CHECKING blocks -- by
{user}gaborbernat.
PRs and issues: {issue}2386
{class}~piptools.repositories.LocalRequirementsRepository now accepts any
{class}~piptools.repositories.BaseRepository subclass as its proxied
repository, not only {class}~piptools.repositories.PyPIRepository
-- by {user}gaborbernat.
PRs and issues: {issue}2387
A handful of f-string conversions in {mod}piptools.utils and the CLI
entry points in {mod}piptools.scripts.compile and
{mod}piptools.scripts.sync carried a stray space before !s (e.g.
f"...{value !s}..."). {pep}498 forbids the whitespace before the
conversion flag and tooling differs on whether the form parses; the
literals are now in canonical {value!s} shape -- by
{user}gaborbernat.
PRs and issues: {issue}2388
A session-scoped autouse fixture in {file}tests/conftest.py now drops every
PIP_* environment variable before any other fixture runs, so the test
suite no longer flakes on contributor machines whose shell exports
PIP_INDEX_URL, PIP_FIND_LINKS, PIP_TRUSTED_HOST, and the rest of
the family for a corporate mirror. Tests that need a specific variable
keep their function-scoped {meth}pytest:pytest.MonkeyPatch.setenv and
supersede the session-level deletion -- by {user}gaborbernat.
PRs and issues: {issue}2390
The Sphinx configuration now resolves cross-references for
{external+packaging:doc}packaging <index>, {external+pip:doc}pip <index>,
{external+pip:doc}click <index>, {mod}build, and {mod}importlib_metadata
via intersphinx, and the deprecated sphinx.util.console.bold helper is
replaced with a plain logger.info call (the colour markup never rendered
in CI logs anyway). Cross-references in docstrings that previously fell
back to nitpick suppression now link to the upstream documentation -- by
{user}gaborbernat.
PRs and issues: {issue}2391
The Notify Codecov CI workflow job now only fails on privilege errors
in the upstream project repository runs. This fixes a problem
contributors face when running CI within their forks that are not filed
as true Codecov-side projects.
-- {user}gaborbernat and {user}webknjaz
PRs and issues: {issue}2392
Fixed incorrect nitpick ignore regexes -- by {user}sirosen.
pip-tools CI now pins GitHub Actions versions to hashes -- by {user}sirosen.
pip-tools now tests against PyPy 3.11 -- by {user}sirosen and {user}webknjaz.
pip-tools's GitHub Actions config now specifies the Ubuntu and Windows runner
versions used.
Removals and backward incompatible breaking changes
2026-02-11
The option --unsafe-package is now normalized -- by @shifqu.
PRs and issues: #2150
Fixed a bug in which pip-compile lost any index URL options when
looking up hashes -- by @sirosen.
This caused errors when a package was only available from an extra
index, and caused pip-compile to incorrectly drop index URL options
from output, even when they were present in the input requirements.
Fixed removal of temporary files used when reading requirements from stdin
-- by @sirosen.
pip-tools is now tested against Python 3.14 and 3.14t in CI, and
marks them as supported in the core packaging metadata
-- by @webknjaz.
PRs and issues: #2255
pip-tools is now compatible with pip 26.0 -- by @sirosen.
The change log management infra now allows the maintainers to add notes
before and after the regular categories -- by @webknjaz.
Added documentation clarifying that pip-compile reads the existing
output file as a constraint source, and how to use --upgrade to
refresh dependencies -- by @maliktafheem.
PRs and issues: #2307
pip-tools is now tested against Python 3.14 and 3.14t in CI, and
marks them as supported in the core packaging metadata
-- by @webknjaz.
PRs and issues: #2255
Consistency of the Markdown files is now being enforced by linting
with pymarkdownlnt -- by @webknjaz.
PRs and issues: #2256
The linting is now set up to perform structured GitHub Actions
workflows and actions checks against json schemas
-- by @webknjaz.
PRs and issues: #2273
The CI/CD is now set up so that the distribution build job
is a part of the test pipeline. That pipeline is included in
the release workflow which sources the artifact in produces.
The tests must now pass for the release to be published to PyPI.
-- by @webknjaz
PRs and issues: #2274
Fix actionlint hook usage to always include shellcheck integration -- by @sirosen.
PRs and issues: #2281
Utilities for interacting with pip have started to move into the
:py:mod:piptools._internal._pip_api subpackage -- by @sirosen.
PRs and issues: #2285
The change log management infra now allows the maintainers to add notes
before and after the regular categories -- by @webknjaz.
The linting is now set up to demand that typing is always
imported as a module under the name of _t -- by @webknjaz.
This is enforced by @sirosen's flake8-typing-as-t
plugin for flake8.
PRs and issues: #2289
The tox.ini and .github/ parts of the repository now
have project leads assigned as GitHub code owners -- by @webknjaz.
PRs and issues: #2291
Remove a redundant 'v' prefix from the CI release workflow job name -- by @anandvenugopal-tech.
PRs and issues: #2300
The check-jsonschema ReadTheDocs hook has been enabled, and
the config has been tweaked to pass -- by @sirosen.
2026-02-09
### Bug fixes
The option --unsafe-package is now normalized -- by {user}`shifqu`.
PRs and issues: {issue}`2150`
Fixed a bug in which pip-compile lost any index URL options when looking up hashes -- by {user}`sirosen`.
This caused errors when a package was only available from an extra index, and caused pip-compile to incorrectly drop index URL options from output, even when they were present in the input requirements.
PRs and issues: {issue}`2220`, {issue}`2294`, {issue}`2305`
Fixed removal of temporary files used when reading requirements from stdin -- by {user}`sirosen`.
### Features
pip-tools is now tested against Python 3.14 and 3.14t in CI, and marks them as supported in the core packaging metadata -- by {user}`webknjaz`.
PRs and issues: {issue}`2255`
pip-tools is now compatible with pip 26.0 -- by {user}`sirosen`.
PRs and issues: {issue}`2319`, {issue}`2320`
### Removals and backward incompatible breaking changes
Removed support for Python 3.8 -- by {user}`sirosen`.
### Improved documentation
The change log management infra now allows the maintainers to add notes before and after the regular categories -- by {user}`webknjaz`.
PRs and issues: {issue}`2287`, {issue}`2322`
Added documentation clarifying that pip-compile reads the existing output file as a constraint source, and how to use --upgrade to refresh dependencies -- by {user}`maliktafheem`.
PRs and issues: {issue}`2307`
### Packaging updates and notes for downstreams
pip-tools is now tested against Python 3.14 and 3.14t in CI, and marks them as supported in the core packaging metadata -- by {user}`webknjaz`.
PRs and issues: {issue}`2255`
### Contributor-facing changes
Consistency of the Markdown files is now being enforced by linting with {pypi}`pymarkdownlnt` -- by {user}`webknjaz`.
PRs and issues: {issue}`2256`
The linting is now set up to perform structured GitHub Actions workflows and actions checks against json schemas -- by {user}`webknjaz`.
PRs and issues: {issue}`2273`
The CI/CD is now set up so that the distribution build job is a part of the test pipeline. That pipeline is included in the release workflow which sources the artifact in produces. The tests must now pass for the release to be published to PyPI.
-- by {user}`webknjaz`
PRs and issues: {issue}`2274`
Fix actionlint hook usage to always include shellcheck integration -- by {user}`sirosen`.
PRs and issues: {issue}`2281`
Utilities for interacting with pip have started to move into the piptools._internal._pip_api subpackage -- by {user}`sirosen`.
PRs and issues: {issue}`2285`
The change log management infra now allows the maintainers to add notes before and after the regular categories -- by {user}`webknjaz`.
PRs and issues: {issue}`2287`, {issue}`2322`
The linting is now set up to demand that {py:mod}`typing` is always imported as a module under the name of _t -- by {user}`webknjaz`.
This is enforced by {user}`sirosen`'s {pypi}`flake8-typing-as-t` plugin for {pypi}`flake8`.
PRs and issues: {issue}`2289`
The {file}`tox.ini` and {file}`.github/` parts of the repository now have project leads assigned as GitHub code owners -- by {user}`webknjaz`.
PRs and issues: {issue}`2291`
Remove a redundant 'v' prefix from the CI release workflow job name -- by {user}`anandvenugopal-tech`.
PRs and issues: {issue}`2300`
The check-jsonschema ReadTheDocs hook has been enabled, and the config has been tweaked to pass -- by {user}`sirosen`.
Fixed pip-compile to handle relative path includes which are not subpaths of the current working directory -- by @sirosen .
2025-11-11
Fixed pip-compile to handle relative path includes which are not subpaths of the current working directory -- by @sirosen.
Using --upgrade-package and dynamically building project metadata no longer causes an AttributeError when pip encounters an error during the build -- by @Epic_Wink and @tusharsadhwani.
PRs and issues: #2258
Test and declare Python 3.13 support -- by @jayaddison (for OpenCulinary).
PRs and issues: #2251
pip-tools is now compatible with pip 25.3 -- by @shifqu.
pip-tools now supports installation from git archives by providing setuptools-scm with .git_archival.txt data.
PRs and issues: #2225
The change log entry bot has been explicitly configured to stop requiring news fragments in pull requests having the bot:chronographer:skip label set -- by @sirosen and @webknjaz.
It was also set up to reference our change log authoring document from the GitHub Checks pages. And the reported check name is now set to Change log entry.
PRs and issues: #2201
The CI is now set up to invoke failed tests again with maximum level of detail -- by @webknjaz.
The change is aimed at helping troubleshoot failures that might be difficult to reproduce locally.
PRs and issues: #2254
The integration with Codecov has been updated to ensure that reports are uploaded to the service even on failures -- by @webknjaz.
GitHub Actions is now configured to also send an explicit notification to Codecov about the completion of previously initiated uploads.
Additionally, the configuration file is now .codecov.yml.
PRs and issues: #2265
The linting suite now runs actionlint -- by @webknjaz.
This tool checks typical problems with GitHub Actions workflow definitions and has a registry of widely-used GitHub Action arguments that it validates.
PRs and issues: #2266
2025-11-11
Fixed pip-compile to handle relative path includes which are not subpaths of
the current working directory -- by {user}sirosen.
PRs and issues: {issue}2231, {issue}2260
Using --upgrade-package and dynamically building project metadata no
longer causes an {exc}AttributeError when pip encounters an error during the
build -- by {user}Epic_Wink and {user}tusharsadhwani.
PRs and issues: {issue}2258
Test and declare Python 3.13 support -- by {user}jayaddison (for OpenCulinary).
PRs and issues: {issue}2251
pip-tools is now compatible with pip 25.3 -- by {user}shifqu.
PRs and issues: {issue}2252, {issue}2253
pip-tools now supports installation from git archives by providing
setuptools-scm with .git_archival.txt data.
PRs and issues: {issue}2225
The change log entry bot has been explicitly configured to stop requiring
news fragments in pull requests having the bot:chronographer:skip label set
-- by {user}sirosen and {user}webknjaz.
It was also set up to reference our change log authoring document from the
GitHub Checks pages. And the reported check name is now set to Change log entry.
PRs and issues: {issue}2201
The CI is now set up to invoke failed tests again with
maximum level of detail -- by {user}webknjaz.
The change is aimed at helping troubleshoot failures that might be difficult to reproduce locally.
PRs and issues: {issue}2254
The integration with Codecov has been updated to ensure that reports
are uploaded to the service even on failures -- by {user}webknjaz.
GitHub Actions is now configured to also send an explicit notification to Codecov about the completion of previously initiated uploads.
Additionally, the configuration file is now {file}.codecov.yml.
PRs and issues: {issue}2265
The linting suite now runs actionlint -- by {user}webknjaz.
This tool checks typical problems with GitHub Actions workflow definitions and has a registry of widely-used GitHub Action arguments that it validates.
PRs and issues: {issue}2266
Fixed static parsing of pyproject.toml data when the pyproject.toml is supplied as a relative path -- by @sirosen .
2025-09-26
Fixed static parsing of pyproject.toml data when the pyproject.toml is supplied as a relative path -- by @sirosen.
The "via" paths in pip-compile output for requirements discovered from pyproject.toml data are now written in POSIX format -- by @sirosen.
PRs and issues: #2221
Fixed a bug which removed slashes from URLs in -r and -c in the output of pip-compile -- by @sirosen.
PRs and issues: #2223
Fixed an incompatibility with click >= 8.3 which made pip-compile display incorrect options in the compile command in output headers -- by @sirosen.
PRs and issues: #2235
ReadTheDocs builds for pip-tools no longer include htmlzip and pdf outputs -- by @sirosen.
PRs and issues: #2218
pip-tools now tests on pip version 25.2 -- by @sirosen.
PRs and issues: #2214
The changelog documentation for contributors now provides hyperlinks to the source of each example change note -- by @jayaddison (for OpenCulinary).
PRs and issues: #2217
The CPython versions tested in nightly CI runs are now separate from branch and PR CI, and don't include very old versions -- by @sirosen.
PRs and issues: #2226
2025-09-26
Fixed static parsing of {file}pyproject.toml data when the
{file}pyproject.toml is supplied as a relative path -- by {user}sirosen.
PRs and issues: {issue}2215, {issue}2221, {issue}2233
The "via" paths in pip-compile output for requirements discovered from
pyproject.toml data are now written in POSIX format -- by {user}sirosen.
PRs and issues: {issue}2221
Fixed a bug which removed slashes from URLs in -r and -c in the output
of pip-compile -- by {user}sirosen.
PRs and issues: {issue}2223
Fixed an incompatibility with click >= 8.3 which made pip-compile
display incorrect options in the compile command in output headers
-- by {user}sirosen.
PRs and issues: {issue}2235
pip-tools now officially supports pip version 25.2 -- by {user}sirosen.
PRs and issues: {issue}2214
ReadTheDocs builds for pip-tools no longer include htmlzip and pdf outputs
-- by {user}sirosen.
PRs and issues: {issue}2218
pip-tools now tests on pip version 25.2 -- by {user}sirosen.
PRs and issues: {issue}2214
The changelog documentation for contributors now provides hyperlinks to the
source of each example change note -- by {user}jayaddison
(for OpenCulinary).
PRs and issues: {issue}2217
The CPython versions tested in nightly CI runs are now separate from
branch and PR CI, and don't include very old versions -- by {user}sirosen.
PRs and issues: {issue}2226
Removals and backward incompatible breaking changes
2025-07-30
Fixed the ordering of format controls to preserve underlying pip behavior -- by @sethmlarson.
PRs and issues: #2082
Fixed NoCandidateFound exception to be compatible with pip >= 24.1 -- by @chrysle.
PRs and issues: #2083
pip-compile now produces relative paths for editable dependencies -- by @macro1.
PRs and issues: #2087
Fixed crash failures due to incompatibility with pip >= 25.1 -- by @gkreitz and @sirosen.
pip-compile now treats package versions requested on the command line as constraints for the underlying pip usage.
This applies to build deps in addition to normal package requirements.
-- by @chrysle
PRs and issues: #2106
pip-tools now tests on and officially supports Python 3.12 -- by @sirosen.
PRs and issues: #2188
Requirements file paths in pip-compile output are now normalized to POSIX-style, even when pip-compile is run on Windows.
This provides more consistent output across various platforms.
-- by @sirosen
PRs and issues: #2195
pip-tools now tests against and supports pip up to version 25.1 -- by @sirosen.
PRs and issues: #2195
pip-compile will now relativize the requirements paths which are recorded in its output.
Paths are made relative to the working directory.
This provides more consistent results across pip versions.
-- by @sirosen
pip-tools releases are now configured via Trusted Publishing.
This allows for signature and attestation verification via PyPI.
-- by @webknjaz
pip-tools's CI now runs against pinned pip versions, declared in tox configuration as the "supported" version.
This does not change the support policy for pip versions, but declares what is tested and known to work.
-- by @webknjaz
PRs and issues: #2142
pip-tools now tests against PyPy 3.10 as its supported PyPy version -- by @webknjaz.
PRs and issues: #2146
pip-tools now uses Towncrier to manage the changelog.
-- by @sirosen and @webknjaz, with suggestions from @jayaddison
pip-tools now uses sphinx-issues to link to issues, PRs, commits, and user accounts -- by @sirosen.
PRs and issues: #2202
2025-07-30
Fixed the ordering of format controls to preserve underlying pip behavior
-- by {user}sethmlarson.
PRs and issues: {issue}2082
Fixed NoCandidateFound exception to be compatible with pip >= 24.1
-- by {user}chrysle.
PRs and issues: {issue}2083
pip-compile now produces relative paths for editable dependencies
-- by {user}macro1.
PRs and issues: {issue}2087
Fixed crash failures due to incompatibility with pip >= 25.1
-- by {user}gkreitz and {user}sirosen.
PRs and issues: {issue}2176, {issue}2178
pip-compile now treats package versions requested on the command line as
constraints for the underlying pip usage.
This applies to build deps in addition to normal package requirements.
-- by {user}chrysle
PRs and issues: {issue}2106
pip-tools now tests on and officially supports Python 3.12
-- by {user}sirosen.
PRs and issues: {issue}2188
Requirements file paths in pip-compile output are now normalized to
POSIX-style, even when pip-compile is run on Windows.
This provides more consistent output across various platforms.
-- by {user}sirosen
PRs and issues: {issue}2195
pip-tools now tests against and supports pip up to version 25.1
-- by {user}sirosen.
PRs and issues: {issue}2195
pip-compile will now relativize the requirements paths which are recorded in
its output.
Paths are made relative to the working directory.
This provides more consistent results across pip versions.
-- by {user}sirosen
PRs and issues: {issue}2131, {issue}2195
pip-tools releases are now configured via Trusted Publishing.
This allows for signature and attestation verification via PyPI.
-- by {user}webknjaz
PRs and issues: {issue}2149, {issue}2209, {issue}2210
pip-tools's CI now runs against pinned pip versions, declared in tox
configuration as the "supported" version.
This does not change the support policy for pip versions, but declares what
is tested and known to work.
-- by {user}webknjaz
PRs and issues: {issue}2142
pip-tools now tests against PyPy 3.10 as its supported PyPy version
-- by {user}webknjaz.
PRs and issues: {issue}2146
pip-tools now uses Towncrier to manage the changelog
-- by {user}sirosen and {user}webknjaz,
with suggestions from {user}jayaddison.
PRs and issues: {issue}2201, {issue}2203
pip-tools now uses sphinx-issues
to link to issues, PRs, commits, and user accounts
-- by {user}sirosen.
PRs and issues: {issue}2202
Skip constraint path check ( #2038 ). Thanks @honnix
05 Mar 2024
2038)
-- by {user}honnix.1981)
-- by {user}dragly.Allow force-enabling or force-disabling colorized output ( #2041 ). Thanks @aneeshusa
Features:
Bug Fixes:
src-files not being used when specified in a config file (#2015). Thanks @csalerno-asmlpip-sync (#1989). Thanks @chryslepyproject.toml's metatada parsing errors in verbose mode (#1979). Thanks @szobovOther Changes:
16 Feb 2024
2041)
-- by {user}aneeshusa.1966)
-- by {user}chrysle.1681)
-- by {user}apljungquist.src-files not being used when specified in a config file ({pr}2015)
-- by {user}csalerno-asml.pip-sync ({pr}1989)
-- by {user}chrysle.2011) -- by {user}chrysle.1984)
-- by {user}chludwig-haufe.pyproject.toml's metatada parsing errors in verbose mode ({pr}1979)
-- by {user}szobov.1986)
-- by {user}peterdemin.Add --no-strip-extras and warn about strip extras by default ( #1954 ). Thanks @ryanhiebert
Features:
--no-strip-extras and warn about strip extras by default (#1954). Thanks @ryanhiebertBug Fixes:
Other Changes:
pipx run (#1951). Thanks @brettcannon09 Aug 2023
--no-strip-extras and warn about strip extras by default ({pr}1954)
-- by {user}ryanhiebert.1904)
-- by {user}atugushev.1582)
-- by {user}FlorentJeannot.pipx run ({pr}1951)
-- by {user}brettcannon.1948)
-- by {user}jeffwidman.Add -c/--constraint option to pip-compile ( #1936 ). Thanks @atugushev
Features:
-c/--constraint option to pip-compile (#1936). Thanks @atugushevBug Fixes:
pip-compile and pip-sync (#1933). Thanks @atugushevOther Changes:
02 Aug 2023
-c/--constraint option to pip-compile ({pr}1936)
-- by {user}atugushev.pip-compile and pip-sync ({pr}1933)
-- by {user}atugushev.1913)
-- by {user}chrysle.1934)
-- by {user}atugushev.Validate parsed config against CLI options ({pr}1910) -- by {user}atugushev.
18 Jul 2023
1910)
-- by {user}atugushev.pip-sync would unexpectedly uninstall some packages ({pr}1919)
-- by {user}atugushev.Default to --resolver=backtracking ({pr}1897) -- by {user}atugushev.
14 Jul 2023
--resolver=backtracking ({pr}1897)
-- by {user}atugushev.1879)
-- by {user}chrysle.pip==23.2 where refactored out DEV_PKGS ({pr}1906)
-- by {user}atugushev.--no-config option ({pr}1896)
-- by {user}atugushev.1885)
-- by {user}siddharthab.vias when more than two input files are used ({pr}1890)
-- by {user}lpulley.Support config defaults using .pip-tools.toml or pyproject.toml ({pr}1863) -- by {user}j00bar.
28 Jun 2023
.pip-tools.toml or pyproject.toml ({pr}1863)
-- by {user}j00bar.-P and the output file is present but
empty ({pr}1822) -- by {user}davidmreed.pip-compile if no --allow-unsafe was passed ({pr}1867)
-- by {user}chrysle.pre-commit hook to run off requirements.in ({pr}1847)
-- by {user}atugushev.1851)
-- by {user}shatakshiiii.Add support for pip==23.1 where deprecated --install-option has been removed ({pr}1828) -- by {user}atugushev.
07 Apr 2023
1791)
-- by {user}q0w.pip==23.1 where removed FormatControl in WheelCache ({pr}1834)
-- by {user}atugushev.pip==23.1 where refactored requirement options ({pr}1832)
-- by {user}atugushev.pip==23.1 where deprecated --install-option has been
removed ({pr}1828) -- by {user}atugushev.--cache-dir to --pip-args for backtracking resolver ({pr}1827)
-- by {user}q0w.1835)
-- by {user}lucaswerkmeister.Remove extras from user-supplied constraints in backtracking resolver ({pr}1808) -- by {user}thomdixon.
01 Mar 2023
1808)
-- by {user}thomdixon.1802)
-- by {user}richafrank.Raise error if input and output filenames are matched ({pr}1787) -- by {user}atugushev.
25 Dec 2022
1787)
-- by {user}atugushev.pyproject.toml as default input file format ({pr}1780)
-- by {user}berislavlopac.--allow-unsafe ({pr}1788)
-- by {user}q0w.Set explicitly packages for setuptools ({pr}1782) -- by {user}q0w.
16 Dec 2022
1782)
-- by {user}q0w.Add --no-index flag to pip-compile ({pr}1745) -- by {user}atugushev.
13 Dec 2022
--no-index flag to pip-compile ({pr}1745)
-- by {user}atugushev.--upgrade-packages PKGSPECs as constraints (not just minimums),
consistently ({pr}1578) -- by {user}AndydeCleyre.1766)
-- by {user}q0w.1763)
-- by {user}ssbarnea.Add pyproject.toml file ({pr}1643) -- by {user}otherJL0.
30 Nov 2022
pyproject.toml file ({pr}1643)
-- by {user}otherJL0.setuptools/pyproject.toml requirement files ({pr}1727)
-- by {user}atugushev.pip-compile header ({pr}1547)
-- by {user}blueyed.1723)
-- by {user}neykov.>= 8 ({pr}1733)
-- by {user}atugushev.>= 22.2 ({pr}1729)
-- by {user}atugushev.Deprecate pip-compile --resolver=legacy ({pr}1724) -- by {user}atugushev.
13 Nov 2022
pip-compile --resolver=legacy ({pr}1724)
-- by {user}atugushev.1719)
-- by {user}maxfenv.1708)
-- by {user}hugovk.--newline=[LF|CRLF|native|preserve] option to pip-compile ({pr}1652)
-- by {user}AndydeCleyre.1713)
-- by {user}mkniewallner.1614)
-- by {user}GalaxySnail.1701)
-- by {user}Kludex.1718)
-- by {user}maxfenv.1716)
-- by {user}Arhell.Add --all-extras flag to pip-compile ({pr}1630) -- by {user}apljungquist.
05 Oct 2022
--all-extras flag to pip-compile ({pr}1630)
-- by {user}apljungquist.1509)
-- by {user}hmc-cs-mdrissi.1649)
-- by {user}atugushev.py.typed in wheel file ({pr}1648)
-- by {user}FlorentJeannot.1668)
-- by {user}hynek.Add support for pip's 2020 dependency resolver. Use pip-compile --resolver backtracking to enable new resolver ({pr}1539) -- by {user}atugushev.
30 Jun 2022
pip-compile --resolver backtracking to enable new resolver ({pr}1539)
-- by {user}atugushev.Support for the importlib.metadata metadata implementation ({pr}1632) -- by {user}richafrank.
27 Jun 2022
importlib.metadata metadata implementation ({pr}1632)
-- by {user}richafrank.InstallRequirement for combine_install_requirements
output ({pr}1519)
-- by {user}richafrank.pep517 module with the build module, for loading
project metadata ({pr}1629)
-- by {user}AndydeCleyre.Update PyPIRepository::resolve_reqs() for pip>=22.1.1 ({pr}1624) -- by {user}m000.
23 May 2022
PyPIRepository::resolve_reqs() for pip>=22.1.1 ({pr}1624)
-- by {user}m000.Fix support for pip>=22.1 ({pr}1618) -- by {user}wizpig64.
13 May 2022
1618)
-- by {user}wizpig64.Add support for pip>=22.1 ({pr}1607) -- by {user}atugushev.
06 Apr 2022
1607)
-- by {user}atugushev.pip-compile --dry-run --quiet still shows what would be done, while omitting
the dry run message ({pr}1592)
-- by {user}AndydeCleyre.--generate-hashes when hashes are computed from files ({pr}1540)
-- by {user}RazerM.Ensure canonicalized requirement names are used as keys, to prevent unnecessary reinstallations during sync ({pr}1572) -- by {user}AndydeCleyre.
08 Feb 2022
1572)
-- by {user}AndydeCleyre.Add support for pip>=22.0, drop support for Python 3.6 ({pr}1567) -- by {user}di.
04 Feb 2022
1567)
-- by {user}di.1527)
-- by {user}hugovk.1445)
-- by {user}ssiano.Add support for pip>=21.3 ({pr}1501) -- by {user}atugushev.
12 Oct 2021
pip>=21.3 ({pr}1501)
-- by {user}atugushev.1497)
-- by {user}joshuadavidthomas.>= 21.2 ({pr}1500)
-- by {user}atugushev.Ensure pip-tools unions dependencies of multiple declarations of a package with different extras ({pr}1486) -- by {user}richafrank.
08 Oct 2021
pip-tools unions dependencies of multiple declarations of a package with
different extras ({pr}1486)
-- by {user}richafrank.--extra ({pr}1493)
-- by {user}AndydeCleyre.1492)
-- by {user}AndydeCleyre.Enable single-line annotations with pip-compile --annotation-style=line ({pr}1477) -- by {user}AndydeCleyre.
21 Sep 2021
pip-compile --annotation-style=line ({pr}1477)
-- by {user}AndydeCleyre.1455)
-- by {user}FlorentJeannot.1392)
-- by {user}FlorentJeannot.1460)
-- by {user}plannigan.--no-upgrade option ({pr}1438)
-- by {user}ssbarnea.Add --emit-options/--no-emit-options flags to pip-compile ({pr}1123) -- by {user}atugushev.
22 Jun 2021
--emit-options/--no-emit-options flags to pip-compile ({pr}1123)
-- by {user}atugushev.--python-executable option for pip-sync ({pr}1333)
-- by {user}MaratFM.828)
-- by {user}graingert.pip-compile package ordering ({pr}1419)
-- by {user}adamsol.--strip-extras option to pip-compile for producing constraint compatible
output ({pr}1404)
-- by {user}ssbarnea.click v7 version_option compatibility ({pr}1410)
-- by {user}FuegoFro.package_name explicitly in click.version_option decorators for compatibility
with click>=8.0 ({pr}1400)
-- by {user}nicoa.pre-commit hooks ({pr}1387)
-- by {user}microcat49.setuptools and wheel dependencies to the setup.cfg ({pr}889)
-- by {user}jayvdb.1394)
-- by {user}FlorentJeannot.requirements.txt ({pr}1369)
-- by {user}mikepqr.Add support for pyproject.toml or setup.cfg as input dependency file {pep}517 for pip-compile ({pr}1356) -- by {user}orsinium.
14 Apr 2021
pyproject.toml or setup.cfg as input dependency file
{pep}517 for pip-compile ({pr}1356)
-- by {user}orsinium.pip-compile --extra option to specify extras_require dependencies
({pr}1363) -- by {user}orsinium.PIP_TOOLS_CACHE_DIR ({pr}1368)
-- by {user}AndydeCleyre.Fixed a bug with undeclared dependency on importlib-metadata at Python 3.6 ({pr}1353) -- by {user}atugushev.
15 Mar 2021
importlib-metadata at Python 3.6 ({pr}1353)
-- by {user}atugushev.pep517 dependency ({pr}1353)
-- by {user}atugushev.Remove deprecated --index/--no-index option from pip-compile ({pr}1234) -- by {user}jdufresne.
12 Mar 2021
1243)
-- by {user}jdufresne.--index/--no-index option from pip-compile ({pr}1234)
-- by {user}jdufresne.pep517 to parse dependencies metadata from setup.py ({pr}1311)
-- by {user}astrojuanlu.pip-compile with setup.py would not include dependencies with
environment markers ({pr}1311)
-- by {user}astrojuanlu.=== over == when generating requirements.txt if a dependency was pinned
with === ({pr}1323)
-- by {user}IceTDrinker.pip-compile with setup.py in nested folder would generate
setup.txt output file ({pr}1324)
-- by {user}peymanslh.--extra-index-url ({pr}1325)
-- by {user}fahrradflucht.pip minimum version to >= 20.3 ({pr}1340)
-- by {user}atugushev.Add Python 3.9 support ({pr}1222) -- by {user}jdufresne.
31 Dec 2020
1222)
-- by {user}jdufresne.1237)
-- by {user}jdufresne.--verbose and --quiet options to pip-sync ({pr}1241)
-- by {user}jdufresne.--no-allow-unsafe option to pip-compile ({pr}1265)
-- by {user}jdufresne.PIP_EXISTS_ACTION environment variable to its previous state when resolve
dependencies in pip-compile ({pr}1255)
-- by {user}jdufresne.six dependency in favor pip's vendored six ({pr}1240)
-- by {user}jdufresne.pip-requirements.el (for Emacs) to useful tools to README ({pr}1244)
-- by {user}jdufresne.README ({pr}1246)
-- by {user}jdufresne.Add pip>=20.3 support ({pr}1216) -- by {user}atugushev and {user}AndydeCleyre.
21 Nov 2020
pip>=20.3 support ({pr}1216)
-- by {user}atugushev and {user}AndydeCleyre.--no-reuse-hashes option from «command to run» header ({pr}1197)
-- by {user}graingert.pip minimum version to >= 20.1 ({pr}1191)
-- by {user}atugushev and {user}AndydeCleyre.Fix pip-20.2 compatibility issue that caused pip-tools to sometime fail to stabilize in a constant number of rounds ({pr}1194) -- by {user}vphilippon.
31 Jul 2020
pip-20.2 compatibility issue that caused pip-tools to sometime fail to
stabilize in a constant number of rounds ({pr}1194)
-- by {user}vphilippon.Add -h alias for --help option to pip-sync and pip-compile ({pr}1163) -- by {user}jan25.
26 Jul 2020
-h alias for --help option to pip-sync and pip-compile ({pr}1163)
-- by {user}jan25.pip>=20.2 support ({pr}1168)
-- by {user}atugushev.pip-sync now exists with code 1 on --dry-run ({pr}1172)
-- by {user}francisbrito.pip-compile now doesn't resolve constraints from -c constraints.txtthat
are not (yet) requirements ({pr}1175) -- by {user}clslgrnc.--reuse-hashes/--no-reuse-hashes options to pip-compile ({pr}1177)
-- by {user}graingert.Fix a bug where pip-compile would lose some dependencies on update a requirements.txt ({pr}1159) -- by {user}richafrank.
09 Jun 2020
pip-compile would lose some dependencies on update a
requirements.txt ({pr}1159)
-- by {user}richafrank.Deprecate --index/--no-index in favor of --emit-index-url/--no-emit-index-url options in pip-compile ({pr}1130) -- by {user}atugushev.
27 May 2020
pip-compile generates hashes in a verbose mode ({pr}1113)
-- by {user}atugushev.--emit-index-url/--no-emit-index-url options to pip-compile ({pr}1130)
-- by {user}atugushev.pip-compile would ignore some of package versions when
PIP_PREFER_BINARY is set on ({pr}1119)
-- by {user}atugushev.pip-compile ({pr}1146)
-- by {user}atugushev.1149)
-- by {user}geokala.--index/--no-index in favor of --emit-index-url/--no-emit-index-url
options in pip-compile ({pr}1130)
-- by {user}atugushev.setuptools declarative syntax through setup.cfg ({pr}1141)
-- by {user}jdufresne.Fix grouping of editables and non-editables requirements ({pr}1132) -- by {user}richafrank.
05 May 2020
1132)
-- by {user}richafrank.Fix a bug where pip-compile would generate hashes for *.egg files ({pr}1122) -- by {user}atugushev.
01 May 2020
pip-compile would generate hashes for *.egg files ({pr}1122)
-- by {user}atugushev.Show progress bar when downloading packages in pip-compile verbose mode ({pr}949) -- by {user}atugushev.
27 Apr 2020
pip-compile verbose mode ({pr}949)
-- by {user}atugushev.pip-compile now gets hashes from PyPI JSON API (if available) which significantly
increases the speed of hashes generation ({pr}1109)
-- by {user}atugushev.pip-tools now requires pip>=20.0 (previously 8.1.x - 20.0.x). Windows users, make sure to use python -m pip install pip-tools to avoid issues with pip
16 Apr 2020
pip-tools now requires pip>=20.0 (previously 8.1.x - 20.0.x). Windows users,
make sure to use python -m pip install pip-tools to avoid issues with pip
self-update from now on ({pr}1055)
-- by {user}atugushev.--build-isolation option now set on by default for pip-compile ({pr}1060)
-- by {user}hramezani.pip-sync ({pr}927)
-- by {user}AndydeCleyre.pre-commit hook for pip-compile ({pr}976)
-- by {user}atugushev.pip-compile and pip-sync now pass anything provided to the new
--pip-args option on to pip ({pr}1080) -- by {user}AndydeCleyre.pip-compile output headers are now more accurate when -- is used to escape
filenames ({pr}1080)
-- by {user}AndydeCleyre.pip>=20.1 support ({pr}1088)
-- by {user}atugushev.pip-compile output ({pr}1093)
-- by {user}richafrank.pip-compile now sorts format controls (--no-binary/--only-binary) to ensure
consistent results ({pr}1098)
-- by {user}richafrank.README ({pr}651)
-- by {user}vphilippon.README ({pr}1106)
-- by {user}atugushev.Strip line number annotations such as "(line XX)" from file requirements, to prevent diff noise when modifying input requirement files ({pr}1075) -- b
26 Feb 2020
1075)
-- by {user}adamchainz.README example outputs for primary requirement annotations ({pr}1072)
-- by {user}richafrank.Primary requirements and VCS dependencies are now get annotated with any source .in files and reverse dependencies ({pr}1058) -- by {user}AndydeCleyre
20 Feb 2020
.in files and reverse dependencies ({pr}1058)
-- by {user}AndydeCleyre.pip ({pr}1062) -- by {user}kammala.README with rationale for pinning ({pr}1053)
-- by {user}m-aciek.Fix a bug where pip-compile would keep outdated options from requirements.txt ({pr}1029) -- by {user}atugushev.
31 Jan 2020
pip-compile would keep outdated options from
requirements.txt ({pr}1029) -- by {user}atugushev.No handlers could be found for logger "pip.*" error by configuring the
builtin logging module ({pr}1035)
-- by {user}vphilippon.1037) -- by {user}jeevb.click from 6.0 to 7.0 version in
setup.py ({pr}1039) -- by {user}hramezani.cpython3.6 does not poison the results of pypy3.6 ({pr}1050)
-- by {user}asottile.README more imperative about installing into a project's virtual
environment to avoid confusion ({pr}1023)
-- by {user}tekumara.README about how to install requirements on different
stages to
Workflow for layered requirements
section ({pr}1044)
-- by {user}hramezani.Add --cache-dir option to pip-compile ({pr}1022) -- by {user}richafrank.
21 Jan 2020
--cache-dir option to pip-compile ({pr}1022)
-- by {user}richafrank.pip>=20.0 support ({pr}1024)
-- by {user}atugushev.pip-compile --upgrade-package would upgrade those passed packages
not already required according to the *.in and *.txt files ({pr}1031)
-- by {user}AndydeCleyre.Add Python 3.8 support ({pr}956) -- by {user}hramezani.
25 Nov 2019
956)
-- by {user}hramezani.requirements.txt ({pr}975)
-- by {user}atugushev.pip-compile doesn't copy --trusted-host from requirements.in to
requirements.txt ({pr}964)
-- by {user}atugushev.pip>=20.0
({pr}953 and
{pr}978)
-- by {user}atugushev.968)
-- by {user}atugushev.README about requirements.txt file, which would possibly interfere
if you're compiling from scratch ({pr}959)
-- by {user}hramezani.Add --ask option to pip-sync ({pr}913) -- by {user}georgek.
12 Oct 2019
--ask option to pip-sync ({pr}913)
-- by {user}georgek.pip>=19.3
({pr}864,
{pr}904,
{pr}910,
{pr}912 and
{pr}915)
-- by {user}atugushev.pip-compile --no-header <blank requirements.in> creates/overwrites
requirements.txt ({pr}909)
-- by {user}AndydeCleyre.pip-compile --upgrade-package removes «via» annotation ({pr}931)
-- by {user}hramezani.README about layered requirements files and -c flag ({pr}905)
-- by {user}jamescooke.Add --no-emit-find-links option to pip-compile ({pr}873) -- by {user}jacobtolar.
26 Aug 2019
--no-emit-find-links option to pip-compile ({pr}873)
-- by {user}jacobtolar.--dry-run log message from being printed with --quiet option in
pip-compile ({pr}861)
-- by {user}ddormer.-e ({pr}879)
-- by {user}andersk.Drop support for EOL Python 3.4 ({pr}803) -- by {user}auvipy.
25 Jul 2019
803)
-- by {user}auvipy.pip>=19.2 compatibility ({pr}857)
-- by {user}atugushev.Print provenance information when pip-compile fails ({pr}837) -- by {user}jakevdp.
17 Jul 2019
pip-compile fails ({pr}837)
-- by {user}jakevdp.834)
-- by {user}georgek.--dry-run option in pip-compile ({pr}842)
-- by {user}shipmints and.
{user}atugushevOptions --upgrade and --upgrade-package are no longer mutually exclusive ({pr}831) -- by {user}adamchainz.
06 Jun 2019
--upgrade and --upgrade-package are no longer mutually exclusive ({pr}831)
-- by {user}adamchainz.--generate-hashes with bare VCS URLs ({pr}812)
-- by {user}jcushman.UnicodeError when installing pip-tools from source in
some systems ({pr}816) -- by {user}AbdealiJK.--pre option in the input file ({pr}822)
-- by {user}atugushev.--upgrade-package now works even if the output file does not exist ({pr}831)
-- by {user}adamchainz.Show progressbar on generation hashes in pip-compile verbose mode ({pr}743) -- by {user}atugushev.
09 May 2019
pip-compile verbose mode ({pr}743)
-- by {user}atugushev.--cert and --client-cert to pip-sync ({pr}798)
-- by {user}atugushev.--find-links in pip-compile output ({pr}793)
-- by {user}estan and {user}atugushev.pip-compile headers ({pr}800)
-- by {user}atugushev.807)
-- by {user}jcushman, {user}nim65s and {user}toejough.pip-compile ({pr}808)
-- by {user}atugushev.Fix pip>=19.1 compatibility ({pr}795) -- by {user}atugushev.
24 Apr 2019
pip>=19.1 compatibility ({pr}795)
-- by {user}atugushev.Show less output on pip-sync with --quiet option ({pr}765) -- by {user}atugushev.
03 Apr 2019
pip-sync with --quiet option ({pr}765)
-- by {user}atugushev.--trusted-host in pip-sync ({pr}777)
-- by {user}firebirdberlin.Show default index url provided by pip ({pr}735) -- by {user}atugushev.
13 Mar 2019
pip ({pr}735)
-- by {user}atugushev.758)
-- by {user}atugushev.pip-compile with an explicit setup.py as source
file ({pr}731) -- by {user}atugushev.hashes and markers are
used together ({pr}763) -- by {user}milind-shakya-sp.Add option --quiet to pip-compile ({pr}720) -- by {user}bendikro.
19 Feb 2019
--quiet to pip-compile ({pr}720)
-- by {user}bendikro.pip-compile's header ({pr}733)
-- by {user}atugushev.pip-sync to use pip script depending on a python version ({pr}737)
-- by {user}atugushev.Your coding agent can read these notes before it upgrades. Set up the MCP server →