Repository navigation
fix(setup): keep the version from an earlier project file when a later one has none - #3983
Merged
frostming merged 2 commits intoNov 2, 2026
Conversation
…r one has none Setup.from_directory() reads pyproject.toml, setup.cfg and setup.py in order, and each reader returns "0.0.0" when its file sets no version. Setup.update() copies every truthy field, so that default replaced a version found in an earlier file. A declarative setuptools project (version in setup.cfg, a bare setup() in setup.py) and a pyproject.toml next to a tool-only setup.cfg both came out as 0.0.0. This is the fallback pdm uses when the PEP 517 metadata build fails.
Contributor
Author
|
The Tests workflow here is waiting for approval, so I ran it on my fork: all 20 jobs pass (Linux, macOS and Windows; Python 3.10 to 3.15 and PyPy), running the full |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3983 +/- ##
=======================================
Coverage 89.31% 89.31%
=======================================
Files 120 120
Lines 13583 13586 +3
Branches 2330 2331 +1
=======================================
+ Hits 12131 12134 +3
Misses 909 909
Partials 543 543
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
netbsd-srcmastr
pushed a commit
to NetBSD/pkgsrc
that referenced
this pull request
Nov 12, 2026
Sync dependencies with pyproject.toml, update test status.
## Release v2.29.7 (2026-11-06)
### Bug Fixes
- Upgrade hishel to support version 2 or greater. ([#3995](https://github.com/pdm-project/pdm/issues/3995))
## Release v2.29.6 (2026-11-05)
### Bug Fixes
- Fix the uv mode failing when `pyproject.toml` or `uv.lock` cannot be renamed, as happens when they are bind mounts in a container, by falling back to restoring their content in place. ([#3292](https://github.com/pdm-project/pdm/issues/3292))
- Percent-encode the source username and password in the index URLs passed to uv, so `use_uv` works with credentials that contain characters like `#`, `/` or `%`. ([#3974](https://github.com/pdm-project/pdm/issues/3974))
- Honor local wheel and sdist paths in pylock.toml, preferring them over URLs while preserving explicit artifact filenames. ([#3975](https://github.com/pdm-project/pdm/issues/3975))
- Fix the Python range pdm derives from a `python_version` marker that compares against a three-part version, such as `python_version >= "3.8.1"`. ([#3978](https://github.com/pdm-project/pdm/issues/3978))
- Save prompted credentials only after a successful package upload response. ([#3982](https://github.com/pdm-project/pdm/issues/3982))
- Keep the version from `pyproject.toml` or `setup.cfg` when a later `setup.cfg` or `setup.py` sets none, instead of resetting it to `0.0.0` while parsing project files. ([#3983](https://github.com/pdm-project/pdm/issues/3983))
- Allow `pdm config` to set an explicitly provided empty string value instead of treating it as a read operation. ([#3984](https://github.com/pdm-project/pdm/issues/3984))
- Fix PEP 582 setup for Bash-compatible shells when the installation path contains an apostrophe. ([#3986](https://github.com/pdm-project/pdm/issues/3986))
- Remove the downloaded archive after `pdm python install` installs an interpreter, instead of leaving it in the temporary directory. ([#3988](https://github.com/pdm-project/pdm/issues/3988))
- Quote Poetry platform constraints verbatim instead of using `repr()` when converting them to environment markers, so they stay valid under stricter marker string parsing. ([#3993](https://github.com/pdm-project/pdm/issues/3993))
### Documentation
- Fix two dead links in the project and template usage docs. ([#3976](https://github.com/pdm-project/pdm/issues/3976))
### Miscellany
- Publish releases with `pypa/gh-action-pypi-publish` to attach PEP 740 provenance attestations on PyPI. ([#3979](https://github.com/pdm-project/pdm/issues/3979))
## Release v2.29.5 (2026-10-30)
### Bug Fixes
- Preserve archive subdirectories when writing or exporting pylock.toml. ([#3964](https://github.com/pdm-project/pdm/issues/3964))
- Preserve extras and environment markers on local, URL, Git, and workspace file requirements when translating dependencies for uv. ([#3965](https://github.com/pdm-project/pdm/issues/3965))
- Preserve Git source subdirectories and encoded refs when generating, reusing, and reading uv lockfiles. ([#3966](https://github.com/pdm-project/pdm/issues/3966))
- Allow sorting installed packages by optional metadata such as homepage when some values are missing or unknown. ([#3967](https://github.com/pdm-project/pdm/issues/3967))
- Fill the Homepage in `pdm show` from the `Homepage` Project-URL, and stop `pdm show` failing on a Project-URL that contains a comma. ([#3968](https://github.com/pdm-project/pdm/issues/3968))
- Quote the activation script path that `pdm venv activate` prints for PowerShell, so `Invoke-Expression (pdm venv activate)` works when the path contains spaces or apostrophes. ([#3970](https://github.com/pdm-project/pdm/issues/3970))
- On Windows, quote the extra arguments of a `shell` script, and the `{args}` placeholder in it, for `cmd.exe` instead of with POSIX single quotes. ([#3971](https://github.com/pdm-project/pdm/issues/3971))
- Omit missing package versions when exporting to `pylock.toml`. ([#3972](https://github.com/pdm-project/pdm/issues/3972))
- Fill the Homepage in `pdm list` from the `Homepage` Project-URL when `Home-page` is missing or unknown. ([#3973](https://github.com/pdm-project/pdm/issues/3973))
## Release v2.29.4 (2026-10-27)
### Features & Improvements
- Allow specifying `lock.format` in `pyproject.toml` via the `[tool.pdm.lock]` table. ([#3958](https://github.com/pdm-project/pdm/issues/3958))
### Bug Fixes
- Import a requirements file that starts with a UTF-8 BOM, which failed with a `RequirementError`. ([#3937](https://github.com/pdm-project/pdm/issues/3937))
- Treat a `Pipfile` version without an operator, such as `requests = "2.31.0"`, as an exact `==` pin when importing, like pipenv does, instead of failing with an invalid specifier error. ([#3939](https://github.com/pdm-project/pdm/issues/3939))
- Preserve Poetry include entries targeting both source and wheel distributions when importing a project. ([#3941](https://github.com/pdm-project/pdm/issues/3941))
- Preserve version and description when importing Flit projects with a `src/` layout or an annotated `__version__`. ([#3942](https://github.com/pdm-project/pdm/issues/3942))
- Require `certifi>=2026.10.19`, which removes the `emSign ECC Root CA - G3` root whose eMudhra intermediates had their private keys compromised. ([#3944](https://github.com/pdm-project/pdm/issues/3944))
- `pdm outdated` no longer lists a package whose installed version is newer than the latest one found on the index, such as an installed pre-release or local build. ([#3945](https://github.com/pdm-project/pdm/issues/3945))
- Fix `pdm lock --check` reporting an outdated lockfile when a group is declared in both `[dependency-groups]` and `[tool.pdm.dev-dependencies]`. ([#3947](https://github.com/pdm-project/pdm/issues/3947))
- Show the license from `License-Expression` (PEP 639) in `pdm show` and `pdm list --fields licenses`. ([#3948](https://github.com/pdm-project/pdm/issues/3948))
- Stop `pdm lock` from excluding packages from a lock target when another target shares its OS and architecture, e.g. manylinux and musllinux. ([#3950](https://github.com/pdm-project/pdm/issues/3950))
- Fix a crash when a `python_version` marker compares against a wildcard version such as `python_version == "3.*"`. ([#3951](https://github.com/pdm-project/pdm/issues/3951))
- Send `License-Expression` and `License-File` with the upload in `pdm publish`, so PyPI shows the license of PEP 639 packages. ([#3952](https://github.com/pdm-project/pdm/issues/3952))
- Preserve the subdirectory fragment in source archive requirements when resolving dependencies and serializing requirement URLs. ([#3954](https://github.com/pdm-project/pdm/issues/3954))
- Preserve archive hashes when reading pylock.toml so they remain available for exports. ([#3956](https://github.com/pdm-project/pdm/issues/3956))
- Fix detection of responses served from the HTTP cache, so cached downloads and index pages are reported as cached again. ([#3961](https://github.com/pdm-project/pdm/issues/3961))
### Dependencies
- Install the download dependencies of pbs-installer so Python installation works with its latest releases. ([#3959](https://github.com/pdm-project/pdm/issues/3959))
- Upgrade `unearth` to `>=0.19` and migrate the HTTP client from `httpx` to `httpx2`. `pdm.models.session.PDMPyPIClient` and the transports in `pdm.pytest` are now built on `httpx2`, so plugins interacting with them should import `httpx2` instead of `httpx`. ([#3962](https://github.com/pdm-project/pdm/issues/3962))
## Release v2.29.3 (2026-10-19)
### Features & Improvements
- Add the `--venv` option to `pdm outdated`, like the other commands that read the installed packages. ([#3904](https://github.com/pdm-project/pdm/issues/3904))
### Bug Fixes
- Fix isolated PEP 517 builds skipping packages that are only visible via the host venv's `--system-site-packages`. ([#3895](https://github.com/pdm-project/pdm/issues/3895))
- Fix `pdm import` of Poetry projects dropping optional dependencies whose extras entry is spelled differently, and importing optional dependencies with multiple constraints as required ones. ([#3899](https://github.com/pdm-project/pdm/issues/3899))
- Keep the plain requirement in `pdm export` when the same package is also locked with extras under a narrower marker, so it is no longer missing from `requirements.txt` on the other platforms. ([#3900](https://github.com/pdm-project/pdm/issues/3900))
- Fix `python_version <= "X.Y"` markers excluding the patch releases of `X.Y`, so `pdm install` skipped such dependencies. ([#3902](https://github.com/pdm-project/pdm/issues/3902))
- Fix environment variables set by one task of a composite script, via `env` or `env_file`, leaking into the tasks that run after it. ([#3903](https://github.com/pdm-project/pdm/issues/3903))
- Convert flit's comma-separated `keywords` and obsolete `dev-requires` into valid PEP 621 fields when importing a flit project. ([#3907](https://github.com/pdm-project/pdm/issues/3907))
- Import custom Pipfile package categories, such as `[docs]`, as dependency groups instead of dropping them. ([#3909](https://github.com/pdm-project/pdm/issues/3909))
- Keep editable requirements in `[tool.pdm.dev-dependencies]` on `pdm import`, so the written `[dependency-groups]` table stays valid per PEP 735. ([#3910](https://github.com/pdm-project/pdm/issues/3910))
- Keep Poetry's `develop = true` as an editable requirement when importing dependency groups. ([#3913](https://github.com/pdm-project/pdm/issues/3913))
- Fix `pdm import` of the project's own Poetry `pyproject.toml` writing each dependency group to both `[tool.pdm.dev-dependencies]` and `[dependency-groups]`. ([#3915](https://github.com/pdm-project/pdm/issues/3915))
- Import Pipfile packages declared with a `file` URL, such as `{file = "https://..."}`, as URL requirements instead of dropping the URL. ([#3918](https://github.com/pdm-project/pdm/issues/3918))
- Preserve Poetry platform restrictions as environment markers when importing dependencies. ([#3920](https://github.com/pdm-project/pdm/issues/3920))
- Read an `exclude-newer` timestamp without a UTC offset as UTC, so `pdm lock` no longer fails with a `TypeError` comparing naive and aware datetimes. ([#3922](https://github.com/pdm-project/pdm/issues/3922))
- Do not write empty dependency groups, such as `dev = []` from an empty `[dev-packages]` table, when importing from another format. ([#3925](https://github.com/pdm-project/pdm/issues/3925))
- Strip every leading and trailing `.`, `_` and `-` when `pdm init` derives the project name from the directory, so a folder like `__demo__` no longer produces the invalid name `_demo_`. ([#3927](https://github.com/pdm-project/pdm/issues/3927))
- `pdm init` now writes `project.license` as a license expression string instead of a `{text = ...}` table, and no longer rewrites an existing `{file = ...}` table or license expression into a value the build backend rejects. ([#3929](https://github.com/pdm-project/pdm/issues/3929))
- Read the inline metadata of a script that starts with a UTF-8 BOM, which `pdm run` ignored. ([#3931](https://github.com/pdm-project/pdm/issues/3931))
- Convert a space-separated Poetry version constraint such as `>=1.0 <2.0` like the comma-separated form instead of aborting the import. ([#3934](https://github.com/pdm-project/pdm/issues/3934))
- Resolve relative `path` entries in a `Pipfile` against the directory of the `Pipfile` when importing, instead of the current working directory. ([#3935](https://github.com/pdm-project/pdm/issues/3935))
### Documentation
- Document what to cache and which install command to use when running PDM on CI platforms other than GitHub Actions. ([#2472](https://github.com/pdm-project/pdm/issues/2472))
## Release v2.29.2 (2026-09-17)
### Bug Fixes
- Fix writing lock files specified as bare relative filenames with `pdm lock --lockfile`. ([#3891](https://github.com/pdm-project/pdm/issues/3891))
- Preserve local paths containing spaces and their extras and environment markers when importing requirements files. ([#3894](https://github.com/pdm-project/pdm/issues/3894))
### Documentation
- List the install-pdm.py options the script actually accepts. ([#3889](https://github.com/pdm-project/pdm/issues/3889))
## Release v2.29.1 (2026-09-14)
### Features & Improvements
- Explain missing lockfile groups and provide group-selection recovery guidance when installing, syncing, or updating groups. ([#2682](https://github.com/pdm-project/pdm/issues/2682))
- Allow package-specific overrides for `exclude-newer` resolution limits. ([#3809](https://github.com/pdm-project/pdm/issues/3809))
### Bug Fixes
- Keep the separating comma out of the operator and accept a `v` prefix when converting Poetry version constraints. ([#3860](https://github.com/pdm-project/pdm/issues/3860))
- Escape glob characters in the virtualenv lookup prefix, so a project whose directory name contains `[` or `]` can find its own virtualenv. ([#3869](https://github.com/pdm-project/pdm/issues/3869))
- Write `pyproject.toml` and lockfiles atomically to prevent interrupted writes from truncating them. ([#3870](https://github.com/pdm-project/pdm/issues/3870))
- Resolve the workspace root before making member paths relative, so a root given as a relative path or reached through a symlink no longer raises `ValueError`. ([#3874](https://github.com/pdm-project/pdm/issues/3874))
- Replace the destination of an atomic write instead of unlinking it first, so an interrupted write can no longer destroy `pyproject.toml` or the lockfile. ([#3878](https://github.com/pdm-project/pdm/issues/3878))
- Report the version part that could not be read, instead of blaming a postrelease for every parse failure. ([#3880](https://github.com/pdm-project/pdm/issues/3880))
- Keep quoted local paths that contain `` - `` when parsing requirements files. ([#3885](https://github.com/pdm-project/pdm/issues/3885))
### Documentation
- Clarify dependency command effects on project declarations, lock metadata, and installed packages in the guide and CLI help. ([#2681](https://github.com/pdm-project/pdm/issues/2681))
## Release v2.29.0 (2026-08-29)
### Features & Improvements
- Export editable local dependencies with relative paths in requirements files. ([#3294](https://github.com/pdm-project/pdm/issues/3294))
- Extend `pdm run` with `--env`, `--env-file` and `--working-dir` options to set or override the corresponding script options dynamically. ([#3829](https://github.com/pdm-project/pdm/issues/3829))
### Bug Fixes
- Restrict a locked package to the platform it was resolved for when it doesn't belong to every lock target, so `pdm lock --platform ... --append` no longer adds entries that get installed on the other targets. ([#3261](https://github.com/pdm-project/pdm/issues/3261))
- Keep Poetry `include` entries restricted to the sdist format when importing, writing them to `tool.pdm.build.source-includes` instead of dropping them. ([#3854](https://github.com/pdm-project/pdm/issues/3854))
- Accept `--no-verify-ssl` on `pdm publish`, which was misspelled as `--no-very-ssl`. The old spelling keeps working as an alias. ([#3857](https://github.com/pdm-project/pdm/issues/3857))
- Convert Poetry tilde constraints with fewer than three components to the bounds Poetry means: `~1.2` becomes `<1.3` rather than `<2.0`, and `~1` no longer produces an invalid `~=1` specifier that aborts the import. ([#3858](https://github.com/pdm-project/pdm/issues/3858))
- Keep the separating comma out of the operator and accept a `v` prefix when converting Poetry version constraints. ([#3860](https://github.com/pdm-project/pdm/issues/3860))
- Keep importing a Poetry project when an author or maintainer entry does not fit the `Name <email>` pattern. ([#3861](https://github.com/pdm-project/pdm/issues/3861))
- Skip `requires-python` when a Pipfile `[requires]` table has no python version, instead of writing `>=None`. ([#3862](https://github.com/pdm-project/pdm/issues/3862))
- Leave the version and description empty instead of aborting when a flit module cannot be parsed. ([#3864](https://github.com/pdm-project/pdm/issues/3864))
- Respect dependency group selection options when exporting to `pylock.toml`, producing a single-use lock file that contains only the selected packages. ([#3866](https://github.com/pdm-project/pdm/issues/3866))
## Release v2.28.2 (2026-08-18)
### Bug Fixes
- Keep environment inspection working for Python 3.9 targets when PDM uses dep-logic 0.7 or newer. ([#3838](https://github.com/pdm-project/pdm/issues/3838))
- Cache the update check timestamp even when the version lookup fails, so that pdm no longer appears to hang on every command when PyPI is unreachable. ([#3840](https://github.com/pdm-project/pdm/issues/3840))
- Don't crash with an `IndexError` when listing scripts and one of them is blank. A blank script is now listed as `<BLANK_SCRIPT>`. ([#3842](https://github.com/pdm-project/pdm/issues/3842))
- Keep the whole template URL when `pdm new` is given an `ssh://` or credentialed Git URL, instead of truncating it at the userinfo `@`. ([#3843](https://github.com/pdm-project/pdm/issues/3843))
- Strip comments preceded by any whitespace, not only a plain space, when importing a `requirements.txt` file. ([#3844](https://github.com/pdm-project/pdm/issues/3844))
- Match `--trusted-host` on host and port when importing a `requirements.txt` file, and keep the port when exporting one. ([#3845](https://github.com/pdm-project/pdm/issues/3845))
- Expand a `~` prefix in the `venv.location` config so `pdm venv list/remove/activate/purge` find virtualenvs created under it. ([#3847](https://github.com/pdm-project/pdm/issues/3847))
- Convert a Poetry caret constraint on a `0.x` version to the upper bound Poetry documents, so `^0.2.3` becomes `<0.3.0` and `^0.0.3` becomes `<0.0.4` instead of `<1.0.0`. ([#3848](https://github.com/pdm-project/pdm/issues/3848))
- Fill in a placeholder `project.name` and `project.version` for the `pyproject.toml` generated for `uv`, so `pdm lock`/`pdm install` work with `use_uv` on a project that declares neither. ([#3849](https://github.com/pdm-project/pdm/issues/3849))
- Resolve nested requirement paths relative to remote requirements file URLs. ([#3850](https://github.com/pdm-project/pdm/issues/3850))
## Release v2.28.1 (2026-08-11)
### Features & Improvements
- Defer command action and Python installer imports until their corresponding runtime paths execute. ([#3673](https://github.com/pdm-project/pdm/issues/3673))
- Add `{run_cwd}` placeholder for scripts to reference the original working directory. ([#3734](https://github.com/pdm-project/pdm/issues/3734))
- Add opt-in canonical lock input freshness via `tool.pdm.resolution.lock_inputs` while retaining sticky lockfile behavior and legacy hash fallback for existing lock files. ([#3821](https://github.com/pdm-project/pdm/issues/3821))
- Integrate `argcomplete` for simplified command-line completion scripts. ([#3823](https://github.com/pdm-project/pdm/issues/3823))
### Bug Fixes
- Keep workspace members in their explicitly declared dependency groups instead of adding them to ``default`` in the lockfile. ([#3816](https://github.com/pdm-project/pdm/issues/3816))
- Keep the cached parsed version intact when stripping the local segment in `comparable_version()`. ([#3817](https://github.com/pdm-project/pdm/issues/3817))
- Make `use_uv` support adding local files. ([#3822](https://github.com/pdm-project/pdm/issues/3822))
- Add a Poetry optional dependency to every extra that lists it when importing, instead of only the first one. ([#3831](https://github.com/pdm-project/pdm/issues/3831))
- Do not write null values into the generated `pyproject.toml` when importing a flit project that omits `author-email`/`maintainer-email` or sets only one of `include` and `exclude` in `[tool.flit.sdist]`. ([#3832](https://github.com/pdm-project/pdm/issues/3832))
### Miscellany
- Add Python 3.15 preview version to the CI matrix. ([#3827](https://github.com/pdm-project/pdm/issues/3827))
## Release v2.28.0 (2026-06-23)
### Features & Improvements
- Add experimental workspace support for managing local member projects in a shared root lock file. ([#1505](https://github.com/pdm-project/pdm/issues/1505))
- Defer startup-time imports for Python, virtualenv, and self-management commands. ([#3673](https://github.com/pdm-project/pdm/issues/3673))
### Bug Fixes
- Fix `pdm completion bash` printing `__ltrim_colon_completions: command not found` (and a similar error for `_get_comp_words_by_ref`) when the generated script is sourced in a bash without the `bash-completion` package loaded, such as Git Bash on Windows or minimal Linux containers. The script now defines small fallbacks for both helpers when they are not already available. ([#3793](https://github.com/pdm-project/pdm/issues/3793))
- Avoid forwarding duplicate SIGINT in pdm run on POSIX. ([#3808](https://github.com/pdm-project/pdm/issues/3808))
### Documentation
- Fix the Windows installation instructions for a specific version. `Invoke-Expression` (`iex`) does not accept an `-Args` parameter and cannot forward arguments to a piped script, so the documented command failed. Use the `$env:PDM_VERSION` environment variable, which the install script reads, instead. ([#3792](https://github.com/pdm-project/pdm/issues/3792))
## Release v2.27.0 (2026-05-21)
### Breaking Changes
- Update the minimum required Python version to 3.10. ([#3787](https://github.com/pdm-project/pdm/issues/3787))
### Features & Improvements
- Respect existing values of `pyproject.toml` when running `pdm init` or `pdm new`. ([#3786](https://github.com/pdm-project/pdm/issues/3786))
- Move project plugin installations from `.pdm-plugins` under the project root to an isolated cache directory, and add a fixer to migrate existing plugin directories. ([#3790](https://github.com/pdm-project/pdm/issues/3790))
- Remove legacy importlib compatibility wrappers and use standard-library `importlib.metadata` and `importlib.resources` APIs directly. ([#3796](https://github.com/pdm-project/pdm/issues/3796))
### Bug Fixes
- Fix a security issue with the installer to disallow installing to paths outside of the scheme directory. ([#3787](https://github.com/pdm-project/pdm/issues/3787))
- Refuse to write project-local config and state files (`pdm.toml`, `.pdm-python`, `.python-version`) when the destination is a symlink, preventing an untrusted repository from clobbering files outside the project root. ([#3788](https://github.com/pdm-project/pdm/issues/3788))
- Fix a regression issue that `PDM_LOCKFILE` env var is not respected. ([#3794](https://github.com/pdm-project/pdm/issues/3794))
- Allow configuring the default lock `--exclude-newer` value with `strategy.exclude-newer`. ([#3795](https://github.com/pdm-project/pdm/issues/3795))
## Release v2.26.9 (2026-05-10)
### Features & Improvements
- Support `exclude-newer` in `pyproject.toml` in the `[tool.pdm.resolution]` table ([#3776](https://github.com/pdm-project/pdm/issues/3776))
### Bug Fixes
- Preserve pylock package markers when refreshing lockfile hashes. ([#3773](https://github.com/pdm-project/pdm/issues/3773))
## Release v2.26.8 (2026-04-21)
### Features & Improvements
- `pdm lock --exclude-newer` now accepts relative durations in the format `N{d|h|w}`, such as `7d`, `12h`, and `3w`, in addition to absolute UTC dates and timestamps. ([#3760](https://github.com/pdm-project/pdm/issues/3760))
### Bug Fixes
- Fixed `pdm add --frozen-lockfile --no-sync` to skip dependency resolution and update only `pyproject.toml` without attempting to write the lockfile. ([#3755](https://github.com/pdm-project/pdm/issues/3755))
- Fix `[tool.pdm.options]` being loaded from the current working directory instead of the target project when `-p`/`--project` is used. ([#3756](https://github.com/pdm-project/pdm/issues/3756))
- Put `make_file_executable` into `pdm.utils` to replace the method of the same name in `installer`. To fix a breakage introduced by `installer` v1. ([#3764](https://github.com/pdm-project/pdm/issues/3764))
- Fix `pdm init <template>` overwriting the template's additions to `build-system.requires` when `build-system.build-backend` matches the user's selection. ([#3766](https://github.com/pdm-project/pdm/issues/3766))
- Fixed `PySpecSet` merging to handle impossible Python version ranges like `>=3.6,<3.4` without crashing on empty or inverted gaps. ([#3767](https://github.com/pdm-project/pdm/issues/3767))
### Documentation
- The latest documentation version now shows a warning banner explaining that it is kept in sync with the main branch and may not match the features available in the latest released version. ([#3765](https://github.com/pdm-project/pdm/issues/3765))
## Release v2.26.7 (2026-03-24)
### Features & Improvements
- Speed up dependency resolution when there are complex conflicts. ([#3751](https://github.com/pdm-project/pdm/issues/3751))
### Documentation
- Switch to Zensical as docs generator. ([#3752](https://github.com/pdm-project/pdm/issues/3752))
### Miscellany
- Add comprehensive tests for completion, show, search, and info commands to improve test coverage ([#3541](https://github.com/pdm-project/pdm/issues/3541))
## Release v2.26.6 (2026-01-22)
### Bug Fixes
- Support `packaging==26.0` changes for version comparison ([#3729](https://github.com/pdm-project/pdm/issues/3729))
## Release v2.26.5 (2026-01-21)
### Bug Fixes
- Respect the project path when using cookiecutter template in `pdm init` command. ([#3721](https://github.com/pdm-project/pdm/issues/3721))
- Fix a bug that `resolution.excludes` is not applied when evaluating candidates from the lock file. ([#3726](https://github.com/pdm-project/pdm/issues/3726))
### Documentation
- Remove chatbot from the docs page footer. ([#3722](https://github.com/pdm-project/pdm/issues/3722))
- Generate llms.txt for docs powered by `mkdocs-llmstxt`. ([#3723](https://github.com/pdm-project/pdm/issues/3723))
## Release v2.26.4 (2026-01-09)
### Bug Fixes
- Make sure cursor closing for fixing PyPy different gc mode also add PyPy in CI. ([#3708](https://github.com/pdm-project/pdm/issues/3708))
- Fix a bug that old HTTP cache directories cause PDM to crash when trying to clear them. ([#3715](https://github.com/pdm-project/pdm/issues/3715))
## Release v2.26.3 (2025-12-24)
### Features & Improvements
- Port to `hishel` 1.0.0. ([#3700](https://github.com/pdm-project/pdm/issues/3700))
### Bug Fixes
- Update `.gitignore` file in the default template. ([#3686](https://github.com/pdm-project/pdm/issues/3686))
- Correct the sysconfig variables for Python standalone build installations. ([#3693](https://github.com/pdm-project/pdm/issues/3693))
- Ignore `packages.vcs.requested-revision` if it's None when formatting pylock.toml. ([#3694](https://github.com/pdm-project/pdm/issues/3694))
- Fix test failures with uv test cases using non-venv Python interpreters. ([#3698](https://github.com/pdm-project/pdm/issues/3698))
## Release v2.26.2 (2025-11-24)
### Features & Improvements
- Only parse TOML document with `tomlkit` when writing is required. ([#3672](https://github.com/pdm-project/pdm/issues/3672))
- Add SHA256 checksums for binary releases during the release workflow and create an installer script that downloads binaries from GitHub releases with automatic platform detection and checksum verification. ([#3679](https://github.com/pdm-project/pdm/issues/3679))
### Bug Fixes
- Fix test_use_python_write_file_multiple_versions to match PDM's actual behavior. ([#3660](https://github.com/pdm-project/pdm/issues/3660))
- Correctly calculate the venv path for `UV_PROJECT_ENVIRONMENT` env var when using uv mode. ([#3675](https://github.com/pdm-project/pdm/issues/3675))
- Ensure `implementation.gil_disabled` is a boolean in `get_current_env_spec`. This fix an issue that free-threaded wheels get rejected incorrectly. ([#3677](https://github.com/pdm-project/pdm/issues/3677))
- Fix CLI help formatting on Python 3.14+. ([#3683](https://github.com/pdm-project/pdm/issues/3683))
- Make `PdmBasicAuth` a `cached_property` to accelerate execution. ([#3684](https://github.com/pdm-project/pdm/issues/3684))
### Removals and Deprecations
- Add deprecation warning for `pdm search` command as PyPI no longer supports search API. ([#3674](https://github.com/pdm-project/pdm/issues/3674))
### Miscellany
- Add tests to utils.fs_supports_link_method and utils.convert_to_datetime. ([#3541](https://github.com/pdm-project/pdm/issues/3541))
## Release v2.26.1 (2025-10-29)
### Bug Fixes
- Substitute missing env vars with empty string in `expand_env_vars`. ([#3653](https://github.com/pdm-project/pdm/issues/3653))
- Constrained hishel to be less than 1.0.0 due to its refactor ([#3657](https://github.com/pdm-project/pdm/issues/3657))
## Release v2.26.0 (2025-10-11)
### Features & Improvements
- Limit the log file size to 100MB and truncate the log output if exceeded. ([#3633](https://github.com/pdm-project/pdm/issues/3633))
- Speed up dependency resolution in the bad path by skipping candidates of the same version when resolving. ([#3647](https://github.com/pdm-project/pdm/issues/3647))
### Bug Fixes
- Reload project files after running hook scripts. ([#3615](https://github.com/pdm-project/pdm/issues/3615))
- Fix a bug when using UV as the resolver does not respect the venv.location configuration. ([#3616](https://github.com/pdm-project/pdm/issues/3616))
- Fix `publish --skip-existing` for Nexus Repository OSS >= 3.70 ([#3617](https://github.com/pdm-project/pdm/issues/3617))
- Fix a resolution failure when both prerelease and non-prerelease requirements exist. ([#3634](https://github.com/pdm-project/pdm/issues/3634))
- Ignore invalid `python` requirement during locking. ([#3635](https://github.com/pdm-project/pdm/issues/3635))
- Isolate PDM loggers with the root logger to avoid log leakage. ([#3637](https://github.com/pdm-project/pdm/issues/3637))
- Fix a crash when resolving URL dependencies under `use_uv=true`. ([#3640](https://github.com/pdm-project/pdm/issues/3640))
## Release v2.25.9 (2025-08-22)
No significant changes.
## Release v2.25.8 (2025-08-22)
### Bug Fixes
- Fix a careless error by fast apply in AI coding. ([#3612](https://github.com/pdm-project/pdm/issues/3612))
## Release v2.25.7 (2025-08-22)
### Features & Improvements
- Show the path to site-packages in the output of `pdm info`. ([#3600](https://github.com/pdm-project/pdm/issues/3600))
### Bug Fixes
- Fix `uv python dir` path resolution on Windows ([#3603](https://github.com/pdm-project/pdm/issues/3603))
- Strip local version in version specifiers when writing package locks. ([#3605](https://github.com/pdm-project/pdm/issues/3605))
- Show an error message when 'default' is used in optional dependencies or dependency groups. ([#3609](https://github.com/pdm-project/pdm/issues/3609))
- Prevent hash clearing when appending to lockfile with env_spec. ([#3610](https://github.com/pdm-project/pdm/issues/3610))
## Release v2.25.6 (2025-08-14)
### Features & Improvements
- The `pdm python install -v` command now shows the download URL for the Python interpreter. ([#3552](https://github.com/pdm-project/pdm/issues/3552))
### Bug Fixes
- Ensure `make_array` always returns a tomlkit array type. ([#3586](https://github.com/pdm-project/pdm/issues/3586))
- Preserve multi-line help text in the CLI help output. ([#3587](https://github.com/pdm-project/pdm/issues/3587))
- Re-caculate artifact files and hashes when the lock target changes. ([#3595](https://github.com/pdm-project/pdm/issues/3595))
### Dependencies
- Require packaging>22.0 and remove conditional PACKAGING_22 version checks. ([#3601](https://github.com/pdm-project/pdm/issues/3601))
- Bump truststore to version 0.10.4. ([#3602](https://github.com/pdm-project/pdm/issues/3602))
## Release v2.25.5 (2025-07-30)
### Features & Improvements
- Tell the difference between free-threaded Python and normal ones. Users need to request for free-threaded versions explicitly by adding `t` to the version string, otherwise the normal build will be preferred. ([#3562](https://github.com/pdm-project/pdm/issues/3562))
### Bug Fixes
- Fix a bug that editable local package URLs are empty when using `pylock.toml`. ([#3565](https://github.com/pdm-project/pdm/issues/3565))
- Fix a bug where `pdm export` with `--lockfile pylock.toml` produced empty requirements.txt files due to missing group information extraction from pylock format markers. ([#3573](https://github.com/pdm-project/pdm/issues/3573))
- Read metadata from installed distribution when using reuse-installed strategy. ([#3579](https://github.com/pdm-project/pdm/issues/3579))
- Fix a lockfile writing error when locking git dependencies in the pylock.toml format. ([#3582](https://github.com/pdm-project/pdm/issues/3582))
## Release v2.25.4 (2025-06-30)
### Bug Fixes
- Add credentials when passing source urls to uv resolver. ([#3553](https://github.com/pdm-project/pdm/issues/3553))
- Redact credentials in source urls in the log output, and inject credentials into the source url for uv sync command as well. ([#3555](https://github.com/pdm-project/pdm/issues/3555))
- Fix a bug that extra dependencies of transitive dependencies are not properly installed when USE_UV=true ([#3558](https://github.com/pdm-project/pdm/issues/3558))
- Improve the terminal output when setting up a script environment. ([#3560](https://github.com/pdm-project/pdm/issues/3560))
- Skip non-existent library paths in post-install steps when trying to fix the pth files. ([#3561](https://github.com/pdm-project/pdm/issues/3561))
### Dependencies
- Update `resolvelib` to 1.2.0. ([#3557](https://github.com/pdm-project/pdm/issues/3557))
## Release v2.25.3 (2025-06-22)
### Bug Fixes
- Fix a bug that local file package metadata was missing when reading the lockfile. ([#3545](https://github.com/pdm-project/pdm/issues/3545))
- Extract `dependency-groups` and `extras` markers from `marker` value when parsing pylock.toml. ([#3550](https://github.com/pdm-project/pdm/issues/3550))
## Release v2.25.2 (2025-06-16)
No significant changes.
## Release v2.25.1 (2025-06-14)
### Bug Fixes
- Fix duplicated dependencies added to the lock file when the same dependency with extras is requested. ([#3542](https://github.com/pdm-project/pdm/issues/3542))
- Stabilize order of the `extras` and `dependency-groups` fields in pylock output. ([#3543](https://github.com/pdm-project/pdm/issues/3543))
## Release v2.25.0 (2025-06-13)
### Features & Improvements
- Support pylock as alternative lock format and make it opt-in by config. ([#3481](https://github.com/pdm-project/pdm/issues/3481))
- Search for package metadata in lock file first when reuse strategy is used. ([#3522](https://github.com/pdm-project/pdm/issues/3522))
### Bug Fixes
- Fix Windows 11 install pdm error, which is because of msgpack install failure. ([#3485](https://github.com/pdm-project/pdm/issues/3485))
- Change the return type of `array_of_inline_tables` to list[dict] from list[str] ([#3523](https://github.com/pdm-project/pdm/issues/3523))
- Ensure uv resolver to include hash for package files. ([#3531](https://github.com/pdm-project/pdm/issues/3531))
- Avoid infinite recursion when reading pyproject.toml with circular file dependencies. ([#3539](https://github.com/pdm-project/pdm/issues/3539))
## Release v2.24.2 (2025-05-23)
### Bug Fixes
- Reinstalling local wheel if its checksum changes. ([#3503](https://github.com/pdm-project/pdm/issues/3503))
- Ignore HTTP cache entries if deserialization fails. ([#3515](https://github.com/pdm-project/pdm/issues/3515))
- Fetch missing URLs when `static_urls` is not enabled when running `pdm export -f pylock`. ([#3517](https://github.com/pdm-project/pdm/issues/3517))
- Missing self package when `--self` or `--editable-self` is passed to `pdm export -f pylock`. ([#3518](https://github.com/pdm-project/pdm/issues/3518))
### Miscellany
- Add Python 3.14 to the test matrix. ([#3506](https://github.com/pdm-project/pdm/issues/3506))
## Release v2.24.1 (2025-04-23)
### Bug Fixes
- Install the project when using the `BaseSynchronizer` with `install_self` set
to `True`. This fixes the bug that when calling `pdm sync --quiet`, it skips
installing the project itself. ([#3484](https://github.com/pdm-project/pdm/issues/3484))
- Mark one additional test as requiring network, and fix another one
not to require it anymore. ([#3487](https://github.com/pdm-project/pdm/issues/3487))
## Release v2.24.0 (2025-04-18)
### Features & Improvements
- New command `pdm new` that behaves like `pdm init` but creates a new project. ([#3462](https://github.com/pdm-project/pdm/issues/3462))
- Support use `--name` as project name for command `pdm new` e.g. `pdm new hello --name world` ([#3476](https://github.com/pdm-project/pdm/issues/3476))
- Support exporting to pylock.toml format as described by PEP 751. ([#3480](https://github.com/pdm-project/pdm/issues/3480))
### Bug Fixes
- Pass the `--quiet` option to `pdm sync` command. ([#3401](https://github.com/pdm-project/pdm/issues/3401))
- If a `.python-version` file is found and it contains multiple lines, the file will be ignored. The usage of the `.python-version` file can be disabled, if configuration value `python.use_python_version` (or environment variable `PDM_USE_PYTHON_VERSION`) is `False`. ([#3417](https://github.com/pdm-project/pdm/issues/3417))
- fix `pdm config -e` command to open read-only file under linux ([#3423](https://github.com/pdm-project/pdm/issues/3423))
- Replace project names and import names in both `README.md` and `pyproject.toml` when running `pdm init <template>`. ([#3460](https://github.com/pdm-project/pdm/issues/3460))
- Fix a bug that URL dependency hashes are not updated if running `pdm lock --update-reuse`. ([#3461](https://github.com/pdm-project/pdm/issues/3461))
## Release v2.23.1 (2025-04-09)
### Features & Improvements
- Use `pyapp` to wrap `pdm` as a Python application that bootstrap itself at runtime. ([#3429](https://github.com/pdm-project/pdm/issues/3429))
- Support all providers `id` is supporting currently for OIDC trusted publishing ([#3441](https://github.com/pdm-project/pdm/issues/3441))
### Bug Fixes
- Installation error for local plugins specified with file URL without a name. ([#3407](https://github.com/pdm-project/pdm/issues/3407))
- Eliminate the warning about inherit_metadata when using uv mode. ([#3434](https://github.com/pdm-project/pdm/issues/3434))
- Fix an installation failure when installing editable local dependencies on Windows and Python 3.13. ([#3444](https://github.com/pdm-project/pdm/issues/3444))
- Fix a bug that overridden requirements in lock file get rewritten when adding a new requirement. ([#3446](https://github.com/pdm-project/pdm/issues/3446))
- Cyclic group inclusion is detected incorrectly. Also show the cyclic group names in the error message. ([#3447](https://github.com/pdm-project/pdm/issues/3447))
- Fix a bug that `pdm remove` doesn't handle dependency groups include correctly. ([#3452](https://github.com/pdm-project/pdm/issues/3452))
- Update `unearth` to address an issue downloading git repos with short commit hash. ([#3455](https://github.com/pdm-project/pdm/issues/3455))
## Release v2.23.0 (2025-04-01)
### Features & Improvements
- Add `pdm python find` command to search for a python interpreter. ([#3389](https://github.com/pdm-project/pdm/issues/3389))
- `pdm import` now converts `package-mode` from Poetry's settings table to `distribution`. ([#3427](https://github.com/pdm-project/pdm/issues/3427))
### Bug Fixes
- Excluding non-existing groups for `pdm remove`. ([#3404](https://github.com/pdm-project/pdm/issues/3404))
- Fix a bug that `pdm add` and `pdm update` remove dependency groups incorrectly. ([#3418](https://github.com/pdm-project/pdm/issues/3418))
- Fix a bug that using resolution overrides drops extra dependencies. ([#3426](https://github.com/pdm-project/pdm/issues/3426))
## Release v2.22.4 (2025-03-07)
### Bug Fixes
- Ensure dev-dependencies are added to the correct group when the `tool.pdm.dev-dependencies` table has groups. ([#3392](https://github.com/pdm-project/pdm/issues/3392))
## Release v2.22.3 (2025-01-27)
### Bug Fixes
- Don't validate local file requirements that are not used. ([#3376](https://github.com/pdm-project/pdm/issues/3376))
- Don't set "dependencies" as empty list for uv toml if there is no dependencies in the raw toml file. ([#3378](https://github.com/pdm-project/pdm/issues/3378))
- Add a dummy project name to the script environment pyproject.toml. ([#3382](https://github.com/pdm-project/pdm/issues/3382))
## Release v2.22.2 (2025-01-11)
### Features & Improvements
- Write installer metadata like `INSTALLER` and `REQUESTED` to dist-info directory when installing packages. ([#3359](https://github.com/pdm-project/pdm/issues/3359))
- Respect `.python-version` file in the project root directory when selecting the Python interpreter. By default, it will be written when running `pdm use` command. ([#3367](https://github.com/pdm-project/pdm/issues/3367))
### Bug Fixes
- Fix a problem of missing dependencies when adding to dev dependencies if both editable and non-editable dependencies exist. ([#3361](https://github.com/pdm-project/pdm/issues/3361))
- Use stdlib for URL <-> Path conversions. ([#3362](https://github.com/pdm-project/pdm/issues/3362))
- `shellingham.detect_shell()` returns `('tcsh', '/bin/tcsh')` for tcsh on FreeBSD, so the current code tries to use the Bash venv activation script and fails due to syntax error. This change fixes the issue. ([#3366](https://github.com/pdm-project/pdm/issues/3366))
- Fix a performance issue because pypi source credentials were being queried many times from keyring. ([#3368](https://github.com/pdm-project/pdm/issues/3368))
## Release v2.22.1 (2024-12-19)
### Bug Fixes
- Fix zsh hanging issue by removing PyPI package completion. ([#3329](https://github.com/pdm-project/pdm/issues/3329))
- Write dev dependencies to `dependency-groups` section when importing project from other package managers. ([#3354](https://github.com/pdm-project/pdm/issues/3354))
### Miscellany
- Show a warning when resolving against cross-platform targets under uv mode. ([#3341](https://github.com/pdm-project/pdm/issues/3341))
## Release v2.22.0 (2024-12-09)
### Features & Improvements
- Use minimal template if the project is an application. ([#3295](https://github.com/pdm-project/pdm/issues/3295))
- Add one `safe_compatible` version specifiers saving strategy. ([#3301](https://github.com/pdm-project/pdm/issues/3301))
- Allow customizing scripts display with `scripts.show_header` settings. ([#3313](https://github.com/pdm-project/pdm/issues/3313))
- Speed up the resolution by only resolving wheel candidates if possible. ([#3319](https://github.com/pdm-project/pdm/issues/3319))
- Drop version from the search result, following the change of warehouse. ([#3328](https://github.com/pdm-project/pdm/issues/3328))
- Support `overrides` settings under `[tool.pdm.resolution]` with use_uv ([#3330](https://github.com/pdm-project/pdm/issues/3330))
### Bug Fixes
- No longer requires `wheel` to build a setuptools-backed package. ([#3320](https://github.com/pdm-project/pdm/issues/3320))
- Fix an inconsistent behavior when running `pdm remove <package>` with uv enabled. ([#3323](https://github.com/pdm-project/pdm/issues/3323))
- Fix: uninstallation error when pdm is not installed before. ([#3325](https://github.com/pdm-project/pdm/issues/3325))
- Fix a bug in uv mode that direct URL dependencies can't be installed. ([#3332](https://github.com/pdm-project/pdm/issues/3332))
- Fix a crash issue when rewriting dependency groups with `include-group` items. ([#3333](https://github.com/pdm-project/pdm/issues/3333))
- Also read username from keyring if missing in source/repository config. ([#3334](https://github.com/pdm-project/pdm/issues/3334))
- Allow configuring repositories in project. ([#3335](https://github.com/pdm-project/pdm/issues/3335))
### Miscellany
- Mark tests that require uv and skip them if uv is not found. ([#3324](https://github.com/pdm-project/pdm/issues/3324))
## Release v2.21.0 (2024-11-25)
### Features & Improvements
- Pass original working directory as env variable to pdm scripts ([#3179](https://github.com/pdm-project/pdm/issues/3179))
- Output similar commands or script command when the input command is not correct ([#3270](https://github.com/pdm-project/pdm/issues/3270))
- improve readability of Python interpreter validation message ([#3276](https://github.com/pdm-project/pdm/issues/3276))
- Print task name by default when using `pdm run` ([#3277](https://github.com/pdm-project/pdm/issues/3277))
- Make `OrderedSet.__contains__` run in O(1) ([#3280](https://github.com/pdm-project/pdm/issues/3280))
- Emit `post_lock` after writing pyproject.toml and pdm.lock in add/update ([#3285](https://github.com/pdm-project/pdm/issues/3285))
- Drop support of Python 3.8 ([#3298](https://github.com/pdm-project/pdm/issues/3298))
### Bug Fixes
- Fix the name normalization issue for optional dependency groups. ([#3271](https://github.com/pdm-project/pdm/issues/3271))
- Don't use uv when installing plugins in project. ([#3283](https://github.com/pdm-project/pdm/issues/3283))
- Fix the bug that pdm plugins are invalid after installation on ubuntu system python. ([#3289](https://github.com/pdm-project/pdm/issues/3289))
## Release v2.20.1 (2024-11-09)
### Features & Improvements
- Add a fixer to remove the deprecated `cross_platform` strategy from lock file. ([#3259](https://github.com/pdm-project/pdm/issues/3259))
### Bug Fixes
- Fix the bug that `pdm build` would fail when `use_uv` is true. ([#3231](https://github.com/pdm-project/pdm/issues/3231))
- Fix group name normalization when comparing groups. ([#3247](https://github.com/pdm-project/pdm/issues/3247))
- Inherit file descriptors instead of closing when running child processes in `pdm run`. ([#3252](https://github.com/pdm-project/pdm/issues/3252))
- Fix using `no_proxy` when `all_proxy` is set. ([#3254](https://github.com/pdm-project/pdm/issues/3254))
- Preserve multiline arrays and don't add empty tool.pdm table header when updating the pyproject.toml. ([#3258](https://github.com/pdm-project/pdm/issues/3258))
- Fix compatibility of `ErrorArgumentParser` for Python 3.12 and above. ([#3264](https://github.com/pdm-project/pdm/issues/3264))
## Release v2.20.0 (2024-10-31)
### Features & Improvements
- Support dependency groups as standardized by [PEP 735](https://peps.python.org/pep-0735/). By default, dev dependencies will be written to `[dependency-groups]` table. ([#3230](https://github.com/pdm-project/pdm/issues/3230))
### Bug Fixes
- Fix a bug that `strategy.inherit_metadata` config is not honored when using `--lockfile` option. ([#3232](https://github.com/pdm-project/pdm/issues/3232))
- Always perform install-time resolution when `use_uv` is on. ([#3233](https://github.com/pdm-project/pdm/issues/3233))
### Miscellany
- Update `resolvelib` to 1.1.0. ([#3235](https://github.com/pdm-project/pdm/issues/3235))
## Release v2.19.3 (2024-10-19)
### Features & Improvements
- Allow linking existing Python interpreters to PDM's managed location. ([#3215](https://github.com/pdm-project/pdm/issues/3215))
### Bug Fixes
- Fix a bug that overrides provided by environment variables do not work. ([#3182](https://github.com/pdm-project/pdm/issues/3182))
- Allow prereleases when the requirement is pinned even if disabled by project ([#3202](https://github.com/pdm-project/pdm/issues/3202))
- Pass the python path to the uv venv command. ([#3204](https://github.com/pdm-project/pdm/issues/3204))
- Fix the infinite loop when running in uv mode if the current project has dynamic metadata. ([#3207](https://github.com/pdm-project/pdm/issues/3207))
- Add `--no-frozen-deps` option to `install-pdm.py` script to allow installing newer versions of dependencies. ([#3213](https://github.com/pdm-project/pdm/issues/3213))
- `pdm self update` now prefers the locked dependencies unless `--no-frozen-deps` is specified. ([#3216](https://github.com/pdm-project/pdm/issues/3216))
- By default, `pdm outdated` will only list direct dependencies. This can be changed by adding the `--include-sub` option. ([#3218](https://github.com/pdm-project/pdm/issues/3218))
### Documentation
- Show users the way to uninstall pdm in a more obvious way ([#2470](https://github.com/pdm-project/pdm/issues/2470))
## Release v2.19.2 (2024-10-11)
### Features & Improvements
- Support installing free-threaded Python interpreters with the `t` suffix. ([#3201](https://github.com/pdm-project/pdm/issues/3201))
### Bug Fixes
- `use_uv` fails to lock when there are non-ascii characters in pyproject.toml on Windows. ([#3181](https://github.com/pdm-project/pdm/issues/3181))
- Fix the `pre_install` and `post_install` signals receiving an exhausted generator, instead of a list of packages. ([#3190](https://github.com/pdm-project/pdm/issues/3190))
- Create backup file with random filename to avoid conflicts. ([#3193](https://github.com/pdm-project/pdm/issues/3193))
- Fix the logic error in the `uv` format marker matching. ([#3197](https://github.com/pdm-project/pdm/issues/3197))
- `pdm lock --check` on a lockfile generated with older PDM version has a 0 exit code when there's a change in `pyproject.toml`. ([#3199](https://github.com/pdm-project/pdm/issues/3199))
### Documentation
- Fixed *Bash Completion* suggestion so it doesn't require root privileges ([#3183](https://github.com/pdm-project/pdm/issues/3183))
## Release v2.19.1 (2024-09-23)
### Bug Fixes
- PDM libraries are not loaded correctly for in-process scripts when installed in the user site. ([#3178](https://github.com/pdm-project/pdm/issues/3178))
## Release v2.19.0 (2024-09-23)
### Breaking Changes
- The minimum supported Python version of projects using PDM has been bumped to 3.8. ([#3176](https://github.com/pdm-project/pdm/issues/3176))
### 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](https://github.com/pdm-project/pdm/issues/3163))
- Ensures that `/` is URL encoded in sources URL environment variables. ([#3169](https://github.com/pdm-project/pdm/issues/3169))
- Call functions from shared library in the in-process `env_spec.py` script. ([#3176](https://github.com/pdm-project/pdm/issues/3176))
### Removals and Deprecations
- PDM no longer falls back to `setuptools-pep660` when the build backend doesn't support PEP 660. ([#3159](https://github.com/pdm-project/pdm/issues/3159))
### Miscellany
- Change the project structure to a normal package from a namespace package. ([#3155](https://github.com/pdm-project/pdm/issues/3155))
## Release v2.18.2 (2024-09-10)
### Bug Fixes
- Respect the `excludes` and `overrides` settings when installing packages. ([#3113](https://github.com/pdm-project/pdm/issues/3113))
- Fix a bug of export command that packages with extras are included twice. ([#3123](https://github.com/pdm-project/pdm/issues/3123))
- Remove empty groups when removing packages with `pdm remove`. ([#3133](https://github.com/pdm-project/pdm/issues/3133))
- When running `pdm venv purge`, if the current project's python version had been referencing the removed venv then clear it out. ([#3137](https://github.com/pdm-project/pdm/issues/3137))
- Fix command `pdm config` to not show site configuration file path if it doesn't exist. ([#3149](https://github.com/pdm-project/pdm/issues/3149))
- Now when `--no-markers` is used, the exported requirements can only work on the current platform. ([#3152](https://github.com/pdm-project/pdm/issues/3152))
### Miscellany
- Skip tests related to python installation on non-standard platforms. ([#3053](https://github.com/pdm-project/pdm/issues/3053))
## Release v2.19.0a0 (2024-09-05)
### Breaking Changes
- `pre_install` and `post_install` signals now receive the list of packages to be installed, instead of a candidate mapping. ([#3144](https://github.com/pdm-project/pdm/issues/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](https://github.com/pdm-project/pdm/issues/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](https://github.com/pdm-project/pdm/issues/3144))
## Release v2.18.1 (2024-08-16)
### Bug Fixes
- Skip checking `project.name` if it is absent when running `pdm outdated`. ([#3095](https://github.com/pdm-project/pdm/issues/3095))
- Don't remove the `cross_platform` strategy from old lock files. ([#3105](https://github.com/pdm-project/pdm/issues/3105))
- Fix a bug that the VCS revision is lost if the candidate metadata is cached during resolution. ([#3107](https://github.com/pdm-project/pdm/issues/3107))
- Fix a bug that PDM can't delete source password when saved in keyring. ([#3108](https://github.com/pdm-project/pdm/issues/3108))
## Release v2.18.0 (2024-08-14)
### Features & Improvements
- Respect certificates in env vars `REQUESTS_CA_BUNDLE` and `CURL_CA_BUNDLE` when verifying SSL certificates. ([#3076](https://github.com/pdm-project/pdm/issues/3076))
- Allow pypi.verify_ssl to be configured via PDM_PYPI_VERIFY_SSL environmental variable. ([#3081](https://github.com/pdm-project/pdm/issues/3081))
- Clean logs older than 7 days. ([#3091](https://github.com/pdm-project/pdm/issues/3091))
- Polish the UI looking of locking packages to display the progress. ([#3100](https://github.com/pdm-project/pdm/issues/3100))
### Bug Fixes
- Fixed `pdm venv activate` to remove quotes such that `iex (pdm venv activate)` works correctly ([#2895](https://github.com/pdm-project/pdm/issues/2895))
- Don't crash if the version can't be resolved from the self project. ([#3077](https://github.com/pdm-project/pdm/issues/3077))
- Don't fail `install-pdm.py` if there is an invalid `pyproject.toml` file under the current directory. ([#3085](https://github.com/pdm-project/pdm/issues/3085))
- Make it able to expand env vars in the the dotenv file. Expose `PDM_PROJECT_ROOT` to the dotenv file for expansion. ([#3087](https://github.com/pdm-project/pdm/issues/3087))
- Fix a bug that Python markers from the existing locked packages are considered when locking with `--append` option. ([#3089](https://github.com/pdm-project/pdm/issues/3089))
- Backfill urls from configured indexed when exporting to requirements.txt. ([#3094](https://github.com/pdm-project/pdm/issues/3094))
- Consider the auto-selected Python range when installing from requirements.txt. ([#3095](https://github.com/pdm-project/pdm/issues/3095))
- Fix a bug that env vars do not override project config correctly. ([#3099](https://github.com/pdm-project/pdm/issues/3099))
## Release v2.17.3 (2024-08-01)
### Bug Fixes
- Fix a crash issue when `requires-python` is absent in the project metadata. ([#3062](https://github.com/pdm-project/pdm/issues/3062))
- Now correctly sets related config for PDM_IGNORE_SAVED_PYTHON when it is set to "false", "no", "0". ([#3064](https://github.com/pdm-project/pdm/issues/3064))
- Fix a bug that PDM plugins installed from project-root cannot be loaded, if they have dependencies. ([#3067](https://github.com/pdm-project/pdm/issues/3067))
## Release v2.17.2 (2024-07-31)
### Features & Improvements
- Improve the installation progress output to show the time elapsed. ([#3051](https://github.com/pdm-project/pdm/issues/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](https://github.com/pdm-project/pdm/issues/3052))
### Bug Fixes
- Ignore invalid requires-python values from index. ([#3038](https://github.com/pdm-project/pdm/issues/3038))
- Fix the group selection logic, to make `--without GROUP` work as expected. ([#3045](https://github.com/pdm-project/pdm/issues/3045))
- Suppress outputs for `pdm python install --quiet`. ([#3049](https://github.com/pdm-project/pdm/issues/3049))
## Release v2.17.1 (2024-07-19)
### Bug Fixes
- Raise dep-logic lower bound to 0.4.2 to fix issues with pdm lock after upgrading from older pdm versions ([#3033](https://github.com/pdm-project/pdm/issues/3033))
- Correct the current platform and architecture for win32 and macos systems. ([#3035](https://github.com/pdm-project/pdm/issues/3035))
### Miscellany
- Fix zsh completions ([#3031](https://github.com/pdm-project/pdm/issues/3031))
## Release v2.17.0 (2024-07-18)
### Breaking Changes
- `LockedRepository.all_candidates` now returns a `dict[str, list[Candidate]]` instead of `dict[str, Candidate]`. ([#2995](https://github.com/pdm-project/pdm/issues/2995))
- `post_lock` hook now receives a resolution result of type `dict[str, list[Candidate]]`, instead of `dict[str, Candidate]`. ([#2995](https://github.com/pdm-project/pdm/issues/2995))
### Features & Improvements
- Support reading requirement constraints from pip-style requirement files for "overriding" via `--override` option. ([#2896](https://github.com/pdm-project/pdm/issues/2896))
- Add a `--non-interactive` option for automation scenarios, also interactive prompts will not show up when not running in an interactive terminal. ([#2934](https://github.com/pdm-project/pdm/issues/2934))
- Refactored `pdm python install --list` to reuse the same implementation as other cli commands that work with Python interpreters from pbs_installer. ([#2977](https://github.com/pdm-project/pdm/issues/2977))
- Add `--license` and `--project-version` as CLI options to control and streamline them during `pdm init` - especially in automated scenarios with `--non-interactive` ([#2978](https://github.com/pdm-project/pdm/issues/2978))
- Run pdm sync in "post-rewrite" stage of pre-commit ([#2994](https://github.com/pdm-project/pdm/issues/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](https://github.com/pdm-project/pdm/issues/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](https://pdm-project.org/en/latest/usage/lock-targets) for more details. ([#2995](https://github.com/pdm-project/pdm/issues/2995))
- Rename `--reuse-env` to `--recreate` for `run` command, and reverse the behavior. ([#2999](https://github.com/pdm-project/pdm/issues/2999))
- PDM is now published with optional pinned dependencies using the pdm plugin [pdm-build-locked](https://pdm-build-locked.readthedocs.io/).
To install pdm with its dependencies pinned to the versions it was tested with, run:
```bash
pipx install pdm[locked]
```
To install optional dependency group copier:
```bash
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](https://github.com/pdm-project/pdm/issues/3001))
- Added `--clean-unselected` alias for `--only-keep` ([#3007](https://github.com/pdm-project/pdm/issues/3007))
- Group options for update strategy and save strategy. ([#3016](https://github.com/pdm-project/pdm/issues/3016))
### Bug Fixes
- When locking dependencies that references the self project, the referenced groups should also be recorded in the lockfile. ([#2976](https://github.com/pdm-project/pdm/issues/2976))
- Retry failed installation jobs if they are run sequentially, such as for editable dependencies. ([#3005](https://github.com/pdm-project/pdm/issues/3005))
- Fix the local path issue when `-p` is passed to change the project root. ([#3009](https://github.com/pdm-project/pdm/issues/3009))
- Fix a bug that PDM can't install editable self package with non-isolated build in one go. ([#3018](https://github.com/pdm-project/pdm/issues/3018))
- Add context when parsing version failed. ([#3020](https://github.com/pdm-project/pdm/issues/3020))
- Fix a mistake in build env setup that will cause the `PATH` env var length to grow. ([#3022](https://github.com/pdm-project/pdm/issues/3022))
### Removals and Deprecations
- Remove the deprecation warning of `BaseCommand.__init__()` method. Now it doesn't take any arguments. ([#2995](https://github.com/pdm-project/pdm/issues/2995))
- `Provider.get_reuse_candidate()` method is deprecated in favor of `Provider.iter_reuse_candidates()`, to return an iterable of reuse candidates. ([#2995](https://github.com/pdm-project/pdm/issues/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](https://github.com/pdm-project/pdm/issues/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](https://github.com/pdm-project/pdm/issues/2995))
## Release v2.16.1 (2024-06-26)
### 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](https://github.com/pdm-project/pdm/issues/2943))
- Fix crash when pdm is used with `importlib-metadata` version 8.0. ([#2974](https://github.com/pdm-project/pdm/issues/2974))
## Release v2.16.0 (2024-06-25)
### Features & Improvements
- Add `--no-extras` to `pdm export` to strip extras from the requirements. Now the default behavior is to keep extras. ([#2519](https://github.com/pdm-project/pdm/issues/2519))
- Support PEP 723: running scripts with inline metadata in standalone environment with dependencies. ([#2924](https://github.com/pdm-project/pdm/issues/2924))
- `pdm use` and `pdm python install` now take `requires-python` into account (incl. from pyproject.toml) if python version
not specified and `pdm use` provides auto installation by that. ([#2943](https://github.com/pdm-project/pdm/issues/2943))
- `--no-isolation` no longer installs `build-requires` nor dynamic build dependencies, to be consistent with `pip`. ([#2944](https://github.com/pdm-project/pdm/issues/2944))
- Add notifiers in CLI output when global project is being used. ([#2952](https://github.com/pdm-project/pdm/issues/2952))
- Use `tool.pdm.resolution` table when calculating the content hash of project file, previously only `overrides` table was used.
This will change the hash already stored in the lockfile, so bump the lockfile version to `4.4.2`. ([#2956](https://github.com/pdm-project/pdm/issues/2956))
### Bug Fixes
- Add max retries on read timeout or bad connection. ([#2914](https://github.com/pdm-project/pdm/issues/2914))
- Don't update local files if they don't change. ([#2966](https://github.com/pdm-project/pdm/issues/2966))
- Don't list python versions that don't have any installation link for the current platform. ([#2970](https://github.com/pdm-project/pdm/issues/2970))
### Documentation
- Clarify the purposes of `pdm outdated` and `--unconstrained` option. ([#2965](https://github.com/pdm-project/pdm/issues/2965))
- Some clarifications on the interpreter selection and central package cache. ([#2967](https://github.com/pdm-project/pdm/issues/2967))
## Release v2.15.4 (2024-05-30)
### Bug Fixes
- Build wheel from sdist if available, to make sure sdist is built properly. This behavior is consistent with [pypa/build](https://pypi.org/project/build). ([#2843](https://github.com/pdm-project/pdm/issues/2843))
- Fix the issue of self-referencing extra dependencies failing to be resolved for local packages. ([#2898](https://github.com/pdm-project/pdm/issues/2898))
- Fix an issue of max recursion depth error when parsing a poetry project with circular dependencies on local packages. ([#2900](https://github.com/pdm-project/pdm/issues/2900))
- Fix a bug that VCS dependencies and `--self` don't work in the exported requirements.txt with hashes. ([#2908](https://github.com/pdm-project/pdm/issues/2908))
- Fix a cache miss when there exist built wheels for a given link. ([#2912](https://github.com/pdm-project/pdm/issues/2912))
- Don't try to store caches when `--no-cache` is given. ([#2913](https://github.com/pdm-project/pdm/issues/2913))
## Release v2.15.3 (2024-05-20)
### Bug Fixes
- Fixed pdm venv activate, to also work for windows. And added documentation on how to authenticate to Azure Artifacts ([#2851](https://github.…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Checklist
news/describing what is new.Describe what you have changed in this PR.
When the PEP 517 metadata build fails, pdm falls back to
Setup.from_directory(), which readspyproject.toml,setup.cfgandsetup.pyin that order and merges them withSetup.update().read_setup_cfg()andread_setup_py()returnversion="0.0.0"when their file has no version, andupdate()copies any truthy field, so that default replaces a real version found in an earlier file:setup.cfghasversion = 1.2.3andsetup.pyis justfrom setuptools import setup; setup()→ version0.0.0.pyproject.tomlwithversion = "1.0"next to asetup.cfgthat only holds tool config such as[flake8]→ version0.0.0.read_from_directory()now drops a reader's default version when an earlier file already provided one. The readers still return0.0.0on their own, so a directory with only a version-lesssetup.cfgorsetup.pybehaves as before, and a version that a later file actually sets still wins (test_from_directory_precedence_and_falsy_updateis unchanged). The"0.0.0"literal is now aDEFAULT_VERSIONconstant so the check and the readers can't drift apart.Two tests in
tests/models/test_setup_parsing_extra.pycover the cases above; both return0.0.0onmain.I haven't run the test suite or
pdm run lintlocally. I checked the change by reading the reader code, and CI will run the tests.