GitHub
v2.28.2
Bug Fixes
- Keep environment inspection working for Python 3.9 targets when PDM uses dep-logic 0.7 or newer. (#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)
- 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)
- Keep the whole template URL when
pdm new is given an ssh:// or credentialed Git URL, instead of truncating it at the userinfo @. (#3843)
- Strip comments preceded by any whitespace, not only a plain space, when importing a
requirements.txt file. (#3844)
- Match
--trusted-host on host and port when importing a requirements.txt file, and keep the port when exporting one. (#3845)
- Expand a
~ prefix in the venv.location config so pdm venv list/remove/activate/purge find virtualenvs created under it. (#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)
- 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)
- Resolve nested requirement paths relative to remote requirements file URLs. (#3850)
v2.28.1
Features & Improvements
- Defer command action and Python installer imports until their corresponding runtime paths execute. (#3673)
- Add
{run_cwd} placeholder for scripts to reference the original working directory. (#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)
- Integrate
argcomplete for simplified command-line completion scripts. (#3823)
Bug Fixes
- Keep workspace members in their explicitly declared dependency groups instead of adding them to
default in the lockfile. (#3816)
- Keep the cached parsed version intact when stripping the local segment in
comparable_version(). (#3817)
- Make
use_uv support adding local files. (#3822)
- Add a Poetry optional dependency to every extra that lists it when importing, instead of only the first one. (#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)
Miscellany
- Add Python 3.15 preview version to the CI matrix. (#3827)
v2.28.0
Features & Improvements
- Add experimental workspace support for managing local member projects in a shared root lock file. (#1505)
- Defer startup-time imports for Python, virtualenv, and self-management commands. (#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)
- Avoid forwarding duplicate SIGINT in pdm run on POSIX. (#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)
v2.27.0
Breaking Changes
- Update the minimum required Python version to 3.10. (#3787)
Features & Improvements
- Respect existing values of
pyproject.toml when running pdm init or pdm new. (#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)
- Remove legacy importlib compatibility wrappers and use standard-library
importlib.metadata and importlib.resources APIs directly. (#3796)
Bug Fixes
- Fix a security issue with the installer to disallow installing to paths outside of the scheme directory. (#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)
- Fix a regression issue that
PDM_LOCKFILE env var is not respected. (#3794)
- Allow configuring the default lock
--exclude-newer value with strategy.exclude-newer. (#3795)
v2.26.8
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)
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)
- Fix
[tool.pdm.options] being loaded from the current working directory instead of the target project when -p/--project is used. (#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)
- Fix
pdm init <template> overwriting the template's additions to build-system.requires when build-system.build-backend matches the user's selection. (#3766)
- Fixed
PySpecSet merging to handle impossible Python version ranges like >=3.6,<3.4 without crashing on empty or inverted gaps. (#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)
v2.26.7
Features & Improvements
- Speed up dependency resolution when there are complex conflicts. (#3751)
Documentation
- Switch to Zensical as docs generator. (#3752)
Miscellany
- Add comprehensive tests for completion, show, search, and info commands to improve test coverage (#3541)
v2.26.6
Bug Fixes
- Support
packaging==26.0 changes for version comparison (#3729)
v2.26.5
Bug Fixes
- Respect the project path when using cookiecutter template in
pdm init command. (#3721)
- Fix a bug that
resolution.excludes is not applied when evaluating candidates from the lock file. (#3726)
Documentation
- Remove chatbot from the docs page footer. (#3722)
- Generate llms.txt for docs powered by
mkdocs-llmstxt. (#3723)
v2.26.4
Bug Fixes
- Make sure cursor closing for fixing PyPy different gc mode also add PyPy in CI. (#3708)
- Fix a bug that old HTTP cache directories cause PDM to crash when trying to clear them. (#3715)
Read the original on github.com ↗