Breaking Changes
LockedRepository.all_candidatesnow returns adict[str, list[Candidate]]instead ofdict[str, Candidate]. (#2995)post_lockhook now receives a resolution result of typedict[str, list[Candidate]], instead ofdict[str, Candidate]. (#2995)
Features & Improvements
-
Support reading requirement constraints from pip-style requirement files for "overriding" via
--overrideoption. (#2896) -
Add a
--non-interactiveoption for automation scenarios, also interactive prompts will not show up when not running in an interactive terminal. (#2934) -
Add
--licenseand--project-versionas CLI options to control and streamline them duringpdm init- especially in automated scenarios with--non-interactive(#2978) -
Run pdm sync in "post-rewrite" stage of pre-commit (#2994)
-
Project.get_dependencies()now returns a list ofRequirementinstead of a mapping.
The first argument ofProject.add_dependencies()now accepts a list ofRequirementinstead of a mapping.
The old usage will be kept working for a short period of time and will be removed in the future. (#2995) -
Support locking for specific target, which is a combination of (python, platform, implementation) triple. Bump lock file version to
4.5.0.Example usage:
pdm lock --platform=linux --python="==3.8.*" --implementation=cpython. See the docs for more details. (#2995) -
Rename
--reuse-envto--recreateforruncommand, and reverse the behavior. (#2999) -
PDM is now published with optional pinned dependencies using the pdm plugin pdm-build-locked.
To install pdm with its dependencies pinned to the versions it was tested with, run:
pipx install pdm[locked]
To install optional dependency group copier:
pipx install pdm[locked,copier-locked]
This feature is entirely optional. Installing pdm without the extra will work the same way as before this change. (#3001)
-
Added
--clean-unselectedalias for--only-keep(#3007) -
Group options for update strategy and save strategy. (#3016)
Bug Fixes
- When locking dependencies that references the self project, the referenced groups should also be recorded in the lockfile. (#2976)
- Retry failed installation jobs if they are run sequentially, such as for editable dependencies. (#3005)
- Fix the local path issue when
-pis passed to change the project root. (#3009) - Fix a bug that PDM can't install editable self package with non-isolated build in one go. (#3018)
- Add context when parsing version failed. (#3020)
- Fix a mistake in build env setup that will cause the
PATHenv var length to grow. (#3022)
Removals and Deprecations
- Remove the deprecation warning of
BaseCommand.__init__()method. Now it doesn't take any arguments. (#2995) Provider.get_reuse_candidate()method is deprecated in favor ofProvider.iter_reuse_candidates(), to return an iterable of reuse candidates. (#2995)--no-markersoption inpdm exportcommand becomes a no-op and is marked as deprecated, because it doesn't make sense anymore. (#2995)ignore_compatibilityparameter ofProject.get_provider()/Project.get_repository()/Environment.get_finder()is deprecated. Pass in aEnvSpecviaenv_specparameter instead.
requires_pythonparameter ofpdm.resolver.core.resolve()function is deprecated and has no effect.
cross_platformparameter ofpdm.cli.actions.resolve_candidates_from_lockfile()function is deprecated and has no effect. (#2995)