Skip to content

Releases: pdm-project/pdm

v2.19.0

23 Sep 07:17
31505c6
Compare
Choose a tag to compare

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

10 Sep 08:09
4bc0cb1
Compare
Choose a tag to compare

Bug Fixes

  • Respect the excludes and overrides 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

05 Sep 12:08
431b180
Compare
Choose a tag to compare
v2.19.0a0 Pre-release
Pre-release

Breaking Changes

  • pre_install and post_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, use Project.get_synchronizer method instead.
    Deprecate Core.resolver_class attribute. To get the resolver class, use Project.get_resolver method instead. (#3144)
  • Add experimental support for uv as the resolver and installer. One can opt in by setting use_uv to true using pdm config command. (#3144)

Bug Fixes

  • Respect the excludes and overrides 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

16 Aug 09:48
8ad143c
Compare
Choose a tag to compare

Bug Fixes

  • Skip checking project.name if it is absent when running pdm 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

14 Aug 02:39
2cfa78e
Compare
Choose a tag to compare

Features & Improvements

  • Respect certificates in env vars REQUESTS_CA_BUNDLE and CURL_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 that iex (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 invalid pyproject.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

01 Aug 12:16
3d3c849
Compare
Choose a tag to compare

Bug Fixes

  • Fix a crash issue when requires-python is absent in the project metadata. (#3062)
  • Now correctly sets related config for PDM_IGNORE_SAVED_PYTHON when it is set to "false", "no", "0". (#3064)
  • Fix a bug that PDM plugins installed from project-root cannot be loaded, if they have dependencies. (#3067)

v2.17.2

31 Jul 11:17
fa61dbc
Compare
Choose a tag to compare

Features & Improvements

  • Improve the installation progress output to show the time elapsed. (#3051)
  • The effect of pypi.ignore_stored_index changes a bit. Now even if it is true, index configurations in the config will still be loaded if the index is listed in the pyproject.toml. (#3052)

Bug Fixes

  • Ignore invalid requires-python values from index. (#3038)
  • Fix the group selection logic, to make --without GROUP work as expected. (#3045)
  • Suppress outputs for pdm python install --quiet. (#3049)

v2.17.1

19 Jul 08:33
c76e982
Compare
Choose a tag to compare

Bug Fixes

  • Raise dep-logic lower bound to 0.4.2 to fix issues with pdm lock after upgrading from older pdm versions (#3033)
  • Correct the current platform and architecture for win32 and macos systems. (#3035)

Miscellany

  • Fix zsh completions (#3031)

v2.17.0

18 Jul 10:13
278f9bb
Compare
Choose a tag to compare

Breaking Changes

  • LockedRepository.all_candidates now returns a dict[str, list[Candidate]] instead of dict[str, Candidate]. (#2995)
  • post_lock hook now receives a resolution result of type dict[str, list[Candidate]], instead of dict[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 during pdm 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 of Requirement instead of a mapping.
    The first argument of Project.add_dependencies() now accepts a list of Requirement 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 for run 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 of Provider.iter_reuse_candidates(), to return an iterable of reuse candidates. (#2995)
  • --no-markers option in pdm export command becomes a no-op and is marked as deprecated, because it doesn't make sense anymore. (#2995)
  • ignore_compatibility parameter of Project.get_provider()/Project.get_repository()/Environment.get_finder() is deprecated. Pass in a EnvSpec via env_spec parameter instead.
    requires_python parameter of pdm.resolver.core.resolve() function is deprecated and has no effect.
    cross_platform parameter of pdm.cli.actions.resolve_candidates_from_lockfile() function is deprecated and has no effect. (#2995)

v2.16.1

26 Jun 04:29
0dd75ee
Compare
Choose a tag to compare

Bug Fixes

  • Fix new interface from pbs_installer regarding build_dir and best match auto-install strategy for pdm use
    (same as for pdm python install --list) (#2943)
  • Fix crash when pdm is used with importlib-metadata version 8.0. (#2974)