Releases: pdm-project/pdm
v2.19.0
Bug Fixes
- Fallback version to 0.0.0 when the version is not specified or empty. This can avoid crash when building such project. (#3163)
- Ensures that
/
is URL encoded in sources URL environment variables. (#3169) - Call functions from shared library in the in-process
env_spec.py
script. (#3176)
Removals and Deprecations
- PDM no longer falls back to
setuptools-pep660
when the build backend doesn't support PEP 660. (#3159)
Miscellany
- Change the project structure to a normal package from a namespace package. (#3155)
v2.18.2
Bug Fixes
- Respect the
excludes
andoverrides
settings when installing packages. (#3113) - Fix a bug of export command that packages with extras are included twice. (#3123)
- Remove empty groups when removing packages with
pdm remove
. (#3133) - When running
pdm venv purge
, if the current project's python version had been referencing the removed venv then clear it out. (#3137) - Fix command
pdm config
to not show site configuration file path if it doesn't exist. (#3149) - Now when
--no-markers
is used, the exported requirements can only work on the current platform. (#3152)
Miscellany
- Skip tests related to python installation on non-standard platforms. (#3053)
v2.19.0a0
Breaking Changes
pre_install
andpost_install
signals now receive the list of packages to be installed, instead of a candidate mapping. (#3144)
Features & Improvements
- Deprecate
Core.synchronizer_class
attribute. To get the synchronizer class, useProject.get_synchronizer
method instead.
DeprecateCore.resolver_class
attribute. To get the resolver class, useProject.get_resolver
method instead. (#3144) - Add experimental support for
uv
as the resolver and installer. One can opt in by settinguse_uv
totrue
usingpdm config
command. (#3144)
Bug Fixes
- Respect the
excludes
andoverrides
settings when installing packages. (#3113) - Fix a bug of export command that packages with extras are included twice. (#3123)
- Remove empty groups when removing packages with
pdm remove
. (#3133) - When running
pdm venv purge
, if the current project's python version had been referencing the removed venv then clear it out. (#3137)
v2.18.1
Bug Fixes
- Skip checking
project.name
if it is absent when runningpdm outdated
. (#3095) - Don't remove the
cross_platform
strategy from old lock files. (#3105) - Fix a bug that the VCS revision is lost if the candidate metadata is cached during resolution. (#3107)
- Fix a bug that PDM can't delete source password when saved in keyring. (#3108)
v2.18.0
Features & Improvements
- Respect certificates in env vars
REQUESTS_CA_BUNDLE
andCURL_CA_BUNDLE
when verifying SSL certificates. (#3076) - Allow pypi.verify_ssl to be configured via PDM_PYPI_VERIFY_SSL environmental variable. (#3081)
- Clean logs older than 7 days. (#3091)
- Polish the UI looking of locking packages to display the progress. (#3100)
Bug Fixes
- Fixed
pdm venv activate
to remove quotes such thatiex (pdm venv activate)
works correctly (#2895) - Don't crash if the version can't be resolved from the self project. (#3077)
- Don't fail
install-pdm.py
if there is an invalidpyproject.toml
file under the current directory. (#3085) - Make it able to expand env vars in the the dotenv file. Expose
PDM_PROJECT_ROOT
to the dotenv file for expansion. (#3087) - Fix a bug that Python markers from the existing locked packages are considered when locking with
--append
option. (#3089) - Backfill urls from configured indexed when exporting to requirements.txt. (#3094)
- Consider the auto-selected Python range when installing from requirements.txt. (#3095)
- Fix a bug that env vars do not override project config correctly. (#3099)
v2.17.3
Bug Fixes
v2.17.2
v2.17.1
v2.17.0
Breaking Changes
LockedRepository.all_candidates
now returns adict[str, list[Candidate]]
instead ofdict[str, Candidate]
. (#2995)post_lock
hook 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
--override
option. (#2896) -
Add a
--non-interactive
option for automation scenarios, also interactive prompts will not show up when not running in an interactive terminal. (#2934) -
Add
--license
and--project-version
as 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 ofRequirement
instead of a mapping.
The first argument ofProject.add_dependencies()
now accepts a list ofRequirement
instead 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-env
to--recreate
forrun
command, 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-unselected
alias 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
-p
is 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
PATH
env 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-markers
option inpdm export
command becomes a no-op and is marked as deprecated, because it doesn't make sense anymore. (#2995)ignore_compatibility
parameter ofProject.get_provider()
/Project.get_repository()
/Environment.get_finder()
is deprecated. Pass in aEnvSpec
viaenv_spec
parameter instead.
requires_python
parameter ofpdm.resolver.core.resolve()
function is deprecated and has no effect.
cross_platform
parameter ofpdm.cli.actions.resolve_candidates_from_lockfile()
function is deprecated and has no effect. (#2995)