On behalf of the PyPA, I am pleased to announce that the pip team has just released pip 25.3.
This is the fourth and final major release of pip for the year 2025. You can read more about our versioning, deprecation policy, and release process here.
Highlights
-
Removed non-PEP 517 package build support:
--no-use-pep517has been removed and pip will no longer callsetup.py bdist_wheel.--global-optionand--build-optionhave been removed,--config-settingis now the only way to pass options to the build backend.
-
Removed non-PEP 660 editable installs, so pip will no longer call
setup.py develop, if you use editable installs with setuptools you must now usesetuptools >= 64. -
Added a new option,
--build-constraint, which allows you to specify your build time constraints without affecting your install constraints. UsingPIP_CONSTRAINTto specify build constraints is now deprecated, if you are using build constraints this way now you can preserve the same behavior by pointingPIP_CONSTRAINTandPIP_BUILD_CONSTRAINTto the same file. -
When PEP 658 metadata is available from the remote index
pip install --dry-runandpip lockwill no longer download full distributions. -
Support editable requirements as Direct URLs, e.g.
pip install -e "pkgb @ file://$PWD/pkga". -
Use a temporary directory in the wheel cache to build wheels, so the built wheel is always on the same filesystem as the wheel cache, and can be atomically moved into the cache.
-
Pip itself is now built with
flit-coreinstead ofsetuptools.
Beyond this list, 25.3 contains additional bug fixes and smaller QoL improvements. Please consult our changelog for more information.
Release process
This release was built and published to PyPI using a GitHub workflow and a PyPI Trusted Publisher.
Thanks
As with all pip releases, a significant amount of the work was contributed by pip’s user community. Many thanks to all who have contributed, whether through code, documentation, issue reports and/or discussion. Your help keeps pip improving, and is hugely appreciated.
I would particularly like to thank @sbidoul, who got the removal of non-PEP 517 builds over the line, PEP 517 has been with us for over 10 years now, and non-PEP 517 builds have been deprecated for over 6 years. But the Python packaging ecosystem is huge and removing old flows takes a sustained and continual push by countless people to move to modern practices, thanks to anyone who has helped in any way.
I would further like to thank @ichard26, who, while not authoring as many PRs in this release significantly helped by providing invaluable code reviews.
Regards,
Damian
P.S. As with Richard and the last release, this is my first time as release manager. It’s a tricky task to make sure pip keeps moving forward but being careful and respectful that so many people depend on it.