NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2012 most downloaded on PyPI
A modern Python package and dependency manager supporting the latest PEP standards
Last release 17 days ago
17 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
9 versions withdrawn
withdrawn after publishing
7 years old
254 releases · first in 2020
One column per quarter.
Fix writing lock files specified as bare relative filenames with pdm lock --lockfile .
pdm lock --lockfile. (#3891)Explain missing lockfile groups and provide group-selection recovery guidance when installing, syncing, or updating groups.
exclude-newer resolution limits. (#3809)v prefix when converting Poetry version constraints. (#3860)[ or ] can find its own virtualenv. (#3869)pyproject.toml and lockfiles atomically to prevent interrupted writes from truncating them. (#3870)ValueError. (#3874)pyproject.toml or the lockfile. (#3878)- when parsing requirements files. (#3885)Export editable local dependencies with relative paths in requirements files.
pdm run with --env, --env-file and --working-dir options to set or override the corresponding script options dynamically. (#3829)pdm lock --platform ... --append no longer adds entries that get installed on the other targets. (#3261)include entries restricted to the sdist format when importing, writing them to tool.pdm.build.source-includes instead of dropping them. (#3854)--no-verify-ssl on pdm publish, which was misspelled as --no-very-ssl. The old spelling keeps working as an alias. (#3857)~1.2 becomes <1.3 rather than <2.0, and ~1 no longer produces an invalid ~=1 specifier that aborts the import. (#3858)v prefix when converting Poetry version constraints. (#3860)Name <email> pattern. (#3861)requires-python when a Pipfile [requires] table has no python version, instead of writing >=None. (#3862)pylock.toml, producing a single-use lock file that contains only the selected packages. (#3866)Keep environment inspection working for Python 3.9 targets when PDM uses dep-logic 0.7 or newer.
IndexError when listing scripts and one of them is blank. A blank script is now listed as <BLANK_SCRIPT>. (#3842)pdm new is given an ssh:// or credentialed Git URL, instead of truncating it at the userinfo @. (#3843)requirements.txt file. (#3844)--trusted-host on host and port when importing a requirements.txt file, and keep the port when exporting one. (#3845)~ prefix in the venv.location config so pdm venv list/remove/activate/purge find virtualenvs created under it. (#3847)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)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)Defer command action and Python installer imports until their corresponding runtime paths execute.
{run_cwd} placeholder for scripts to reference the original working directory. (#3734)tool.pdm.resolution.lock_inputs while retaining sticky lockfile behavior and legacy hash fallback for existing lock files. (#3821)argcomplete for simplified command-line completion scripts. (#3823)default in the lockfile. (#3816)comparable_version(). (#3817)use_uv support adding local files. (#3822)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)Add experimental workspace support for managing local member projects in a shared root lock file.
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)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)Update the minimum required Python version to 3.10.
pyproject.toml when running pdm init or pdm new. (#3786).pdm-plugins under the project root to an isolated cache directory, and add a fixer to migrate existing plugin directories. (#3790)importlib.metadata and importlib.resources APIs directly. (#3796)pdm.toml, .pdm-python, .python-version) when the destination is a symlink, preventing an untrusted repository from clobbering files outside the project root. (#3788)PDM_LOCKFILE env var is not respected. (#3794)--exclude-newer value with strategy.exclude-newer. (#3795)Support exclude-newer in pyproject.toml in the [tool.pdm.resolution] table
exclude-newer in pyproject.toml in the [tool.pdm.resolution] table (#3776)exclude-newer to be defined in pyproject.toml by @sneakers-the-rat in #3782Full Changelog: 2.26.8...2.26.9
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 tim
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)pdm add --frozen-lockfile --no-sync to skip dependency resolution and update only pyproject.toml without attempting to write the lockfile. (#3755)[tool.pdm.options] being loaded from the current working directory instead of the target project when -p/--project is used. (#3756)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)pdm init <template> overwriting the template's additions to build-system.requires when build-system.build-backend matches the user's selection. (#3766)PySpecSet merging to handle impossible Python version ranges like >=3.6,<3.4 without crashing on empty or inverted gaps. (#3767)Speed up dependency resolution when there are complex conflicts.
Support packaging==26.0 changes for version comparison
packaging==26.0 changes for version comparison (#3729)Respect the project path when using cookiecutter template in pdm init command.
Make sure cursor closing for fixing PyPy different gc mode also add PyPy in CI.
Update .gitignore file in the default template.
Update .gitignore file in the default template. ( #3686 )
Correct the sysconfig variables for Python standalone build installations. ( #3693 )
Ignore packages.vcs.requested-revision if it's None when formatting pylock.toml. ( #3694 )
Fix test failures with uv test cases using non-venv Python interpreters. ( #3698 )
Add deprecation warning for pdm search command as PyPI no longer supports search API.
Only parse TOML document with tomlkit when writing is required. ( #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 )
Fix test_use_python_write_file_multiple_versions to match PDM's actual behavior. ( #3660 )
Correctly calculate the venv path for UV_PROJECT_ENVIRONMENT env var when using uv mode. ( #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 )
Fix CLI help formatting on Python 3.14+. ( #3683 )
Make PdmBasicAuth a cached_property to accelerate execution. ( #3684 )
Substitute missing env vars with empty string in expand_env_vars .
Substitute missing env vars with empty string in expand_env_vars . ( #3653 )
Constrained hishel to be less than 1.0.0 due to its refactor ( #3657 )
Limit the log file size to 100MB and truncate the log output if exceeded.
Limit the log file size to 100MB and truncate the log output if exceeded. ( #3633 )
Speed up dependency resolution in the bad path by skipping candidates of the same version when resolving. ( #3647 )
Reload project files after running hook scripts. ( #3615 )
Fix a bug when using UV as the resolver does not respect the venv.location configuration. ( #3616 )
Fix publish --skip-existing for Nexus Repository OSS >= 3.70 ( #3617 )
Fix a resolution failure when both prerelease and non-prerelease requirements exist. ( #3634 )
Ignore invalid python requirement during locking. ( #3635 )
Isolate PDM loggers with the root logger to avoid log leakage. ( #3637 )
Fix a crash when resolving URL dependencies under use_uv=true . ( #3640 )
No significant changes.
No significant changes.
Fix a careless error by fast apply in AI coding.
Show the path to site-packages in the output of pdm info .
Fix uv python dir path resolution on Windows ( #3603 )
Strip local version in version specifiers when writing package locks. ( #3605 )
Show an error message when 'default' is used in optional dependencies or dependency groups. ( #3609 )
Prevent hash clearing when appending to lockfile with env_spec. ( #3610 )
The pdm python install -v command now shows the download URL for the Python interpreter.
Ensure make_array always returns a tomlkit array type. ( #3586 )
Preserve multi-line help text in the CLI help output. ( #3587 )
Re-caculate artifact files and hashes when the lock target changes. ( #3595 )
Require packaging>22.0 and remove conditional PACKAGING_22 version checks. ( #3601 )
Bump truststore to version 0.10.4. ( #3602 )
Tell the difference between free-threaded Python and normal ones. Users need to request for free-threaded versions explicitly by adding t to the versi
Fix a bug that editable local package URLs are empty when using pylock.toml . ( #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 )
Read metadata from installed distribution when using reuse-installed strategy. ( #3579 )
Fix a lockfile writing error when locking git dependencies in the pylock.toml format. ( #3582 )
Add credentials when passing source urls to uv resolver.
Add credentials when passing source urls to uv resolver. ( #3553 )
Redact credentials in source urls in the log output, and inject credentials into the source url for uv sync command as well. ( #3555 )
Fix a bug that extra dependencies of transitive dependencies are not properly installed when USE_UV=true ( #3558 )
Improve the terminal output when setting up a script environment. ( #3560 )
Skip non-existent library paths in post-install steps when trying to fix the pth files. ( #3561 )
Fix a bug that local file package metadata was missing when reading the lockfile.
Fix a bug that local file package metadata was missing when reading the lockfile. ( #3545 )
Extract dependency-groups and extras markers from marker value when parsing pylock.toml. ( #3550 )
No significant changes.
No significant changes.
Fix duplicated dependencies added to the lock file when the same dependency with extras is requested.
Fix duplicated dependencies added to the lock file when the same dependency with extras is requested. ( #3542 )
Stabilize order of the extras and dependency-groups fields in pylock output. ( #3543 )
Support pylock as alternative lock format and make it opt-in by config.
Support pylock as alternative lock format and make it opt-in by config. ( #3481 )
Search for package metadata in lock file first when reuse strategy is used. ( #3522 )
Fix Windows 11 install pdm error, which is because of msgpack install failure. ( #3485 )
Change the return type of array_of_inline_tables to list[dict] from list[str] ( #3523 )
Ensure uv resolver to include hash for package files. ( #3531 )
Avoid infinite recursion when reading pyproject.toml with circular file dependencies. ( #3539 )
Reinstalling local wheel if its checksum changes.
Reinstalling local wheel if its checksum changes. ( #3503 )
Ignore HTTP cache entries if deserialization fails. ( #3515 )
Fetch missing URLs when static_urls is not enabled when running pdm export -f pylock . ( #3517 )
Missing self package when --self or --editable-self is passed to pdm export -f pylock . ( #3518 )
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 i
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 )
Mark one additional test as requiring network, and fix another one not to require it anymore. ( #3487 )
New command pdm new that behaves like pdm init but creates a new project.
New command pdm new that behaves like pdm init but creates a new project. ( #3462 )
Support use --name as project name for command pdm new e.g. pdm new hello --name world ( #3476 )
Support exporting to pylock.toml format as described by PEP 751. ( #3480 )
Pass the --quiet option to pdm sync command. ( #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 )
fix pdm config -e command to open read-only file under linux ( #3423 )
Replace project names and import names in both README.md and pyproject.toml when running pdm init <template> . ( #3460 )
Fix a bug that URL dependency hashes are not updated if running pdm lock --update-reuse . ( #3461 )
Use pyapp to wrap pdm as a Python application that bootstrap itself at runtime.
Use pyapp to wrap pdm as a Python application that bootstrap itself at runtime. ( #3429 )
Support all providers id is supporting currently for OIDC trusted publishing ( #3441 )
Installation error for local plugins specified with file URL without a name. ( #3407 )
Eliminate the warning about inherit_metadata when using uv mode. ( #3434 )
Fix an installation failure when installing editable local dependencies on Windows and Python 3.13. ( #3444 )
Fix a bug that overridden requirements in lock file get rewritten when adding a new requirement. ( #3446 )
Cyclic group inclusion is detected incorrectly. Also show the cyclic group names in the error message. ( #3447 )
Fix a bug that pdm remove doesn't handle dependency groups include correctly. ( #3452 )
Update unearth to address an issue downloading git repos with short commit hash. ( #3455 )
Add pdm python find command to search for a python interpreter.
Add pdm python find command to search for a python interpreter. ( #3389 )
pdm import now converts package-mode from Poetry's settings table to distribution . ( #3427 )
Excluding non-existing groups for pdm remove . ( #3404 )
Fix a bug that pdm add and pdm update remove dependency groups incorrectly. ( #3418 )
Fix a bug that using resolution overrides drops extra dependencies. ( #3426 )
Ensure dev-dependencies are added to the correct group when the tool.pdm.dev-dependencies table has groups.
Don't validate local file requirements that are not used.
Don't validate local file requirements that are not used. ( #3376 )
Don't set "dependencies" as empty list for uv toml if there is no dependencies in the raw toml file. ( #3378 )
Add a dummy project name to the script environment pyproject.toml. ( #3382 )
Write installer metadata like INSTALLER and REQUESTED to dist-info directory when installing packages.
Write installer metadata like INSTALLER and REQUESTED to dist-info directory when installing packages. ( #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 )
Fix a problem of missing dependencies when adding to dev dependencies if both editable and non-editable dependencies exist. ( #3361 )
Use stdlib for URL <-> Path conversions. ( #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 )
Fix a performance issue because pypi source credentials were being queried many times from keyring. ( #3368 )
Fix zsh hanging issue by removing PyPI package completion.
Fix zsh hanging issue by removing PyPI package completion. ( #3329 )
Write dev dependencies to dependency-groups section when importing project from other package managers. ( #3354 )
Use minimal template if the project is an application.
Use minimal template if the project is an application. ( #3295 )
Add one safe_compatible version specifiers saving strategy. ( #3301 )
Allow customizing scripts display with scripts.show_header settings. ( #3313 )
Speed up the resolution by only resolving wheel candidates if possible. ( #3319 )
Drop version from the search result, following the change of warehouse. ( #3328 )
Support overrides settings under [tool.pdm.resolution] with use_uv ( #3330 )
No longer requires wheel to build a setuptools-backed package. ( #3320 )
Fix an inconsistent behavior when running pdm remove <package> with uv enabled. ( #3323 )
Fix: uninstallation error when pdm is not installed before. ( #3325 )
Fix a bug in uv mode that direct URL dependencies can't be installed. ( #3332 )
Fix a crash issue when rewriting dependency groups with include-group items. ( #3333 )
Also read username from keyring if missing in source/repository config. ( #3334 )
Allow configuring repositories in project. ( #3335 )
Pass original working directory as env variable to pdm scripts
Pass original working directory as env variable to pdm scripts ( #3179 )
Output similar commands or script command when the input command is not correct ( #3270 )
improve readability of Python interpreter validation message ( #3276 )
Print task name by default when using pdm run ( #3277 )
Make OrderedSet.contains run in O(1) ( #3280 )
Emit post_lock after writing pyproject.toml and pdm.lock in add/update ( #3285 )
Drop support of Python 3.8 ( #3298 )
Fix the name normalization issue for optional dependency groups. ( #3271 )
Don't use uv when installing plugins in project. ( #3283 )
Fix the bug that pdm plugins are invalid after installation on ubuntu system python. ( #3289 )
Add a fixer to remove the deprecated cross_platform strategy from lock file.
Fix the bug that pdm build would fail when use_uv is true. ( #3231 )
Fix group name normalization when comparing groups. ( #3247 )
Inherit file descriptors instead of closing when running child processes in pdm run . ( #3252 )
Fix using no_proxy when all_proxy is set. ( #3254 )
Preserve multiline arrays and don't add empty tool.pdm table header when updating the pyproject.toml. ( #3258 )
Fix compatibility of ErrorArgumentParser for Python 3.12 and above. ( #3264 )
Nothing published for this version
Support dependency groups as standardized by PEP 735 . By default, dev dependencies will be written to [dependency-groups] table.
Fix a bug that strategy.inherit_metadata config is not honored when using --lockfile option. ( #3232 )
Always perform install-time resolution when use_uv is on. ( #3233 )
Allow linking existing Python interpreters to PDM's managed location.
Fix a bug that overrides provided by environment variables do not work. ( #3182 )
Allow prereleases when the requirement is pinned even if disabled by project ( #3202 )
Pass the python path to the uv venv command. ( #3204 )
Fix the infinite loop when running in uv mode if the current project has dynamic metadata. ( #3207 )
Add --no-frozen-deps option to install-pdm.py script to allow installing newer versions of dependencies. ( #3213 )
pdm self update now prefers the locked dependencies unless --no-frozen-deps is specified. ( #3216 )
By default, pdm outdated will only list direct dependencies. This can be changed by adding the --include-sub option. ( #3218 )
Support installing free-threaded Python interpreters with the t suffix.
use_uv fails to lock when there are non-ascii characters in pyproject.toml on Windows. ( #3181 )
Fix the pre_install and post_install signals receiving an exhausted generator, instead of a list of packages. ( #3190 )
Create backup file with random filename to avoid conflicts. ( #3193 )
Fix the logic error in the uv format marker matching. ( #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 )
PDM libraries are not loaded correctly for in-process scripts when installed in the user site.
The minimum supported Python version of projects using PDM has been bumped to 3.8.
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 )
Deprecate Core.synchronizer_class attribute. To get the synchronizer class, use Project.get_synchronizer method instead. Deprecate Core.resolver_class…
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 )
Respect the excludes and overrides settings when installing packages.
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 )
Skip checking project.name if it is absent when running pdm outdated .
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 )
Respect certificates in env vars REQUESTS_CA_BUNDLE and CURL_CA_BUNDLE when verifying SSL certificates.
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 )
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 )
Fix a crash issue when requires-python is absent in the project metadata.
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 )
Improve the installation progress output to show the time elapsed.
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 )
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 )
Raise dep-logic lower bound to 0.4.2 to fix issues with pdm lock after upgrading from older pdm versions
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 )
Remove the deprecation warning of BaseCommand.__init__() method. Now it doesn't take any arguments.
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 )
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 )
Refactored pdm python install --list to reuse the same implementation as other cli commands that work with Python interpreters from pbs_installer. ( #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 )
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 )
To install pdm with its dependencies pinned to the versions it was tested with, run:
1
pipx install pdm [ locked ]
To install optional dependency group copier:
1
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 )
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 )
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 )
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 )
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 )
Add --no-extras to pdm export to strip extras from the requirements. Now the default behavior is to keep extras.
Add --no-extras to pdm export to strip extras from the requirements. Now the default behavior is to keep extras. ( #2519 )
Support PEP 723: running scripts with inline metadata in standalone environment with dependencies. ( #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 )
--no-isolation no longer installs build-requires nor dynamic build dependencies, to be consistent with pip . ( #2944 )
Add notifiers in CLI output when global project is being used. ( #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 )
Add max retries on read timeout or bad connection. ( #2914 )
Don't update local files if they don't change. ( #2966 )
Don't list python versions that don't have any installation link for the current platform. ( #2970 )
Clarify the purposes of pdm outdated and --unconstrained option. ( #2965 )
Some clarifications on the interpreter selection and central package cache. ( #2967 )
Build wheel from sdist if available, to make sure sdist is built properly. This behavior is consistent with pypa/build .
Build wheel from sdist if available, to make sure sdist is built properly. This behavior is consistent with pypa/build . ( #2843 )
Fix the issue of self-referencing extra dependencies failing to be resolved for local packages. ( #2898 )
Fix an issue of max recursion depth error when parsing a poetry project with circular dependencies on local packages. ( #2900 )
Fix a bug that VCS dependencies and --self don't work in the exported requirements.txt with hashes. ( #2908 )
Fix a cache miss when there exist built wheels for a given link. ( #2912 )
Don't try to store caches when --no-cache is given. ( #2913 )
Fixed pdm venv activate, to also work for windows. And added documentation on how to authenticate to Azure Artifacts
Fixed pdm venv activate, to also work for windows. And added documentation on how to authenticate to Azure Artifacts ( #2851 )
Don't show unsupported formats in pdm export . ( #2877 )
Proxy ( HTTP_PROXY env vars) settings are ignored for custom indexes. ( #2880 )
Fix the quoting of venv activate command for powershell. ( #2881 )
Raise an error if the package given by pdm update does not exist in the select dependency group but in other groups. ( #2885 )
Use get_runner() method to build the task runner in run command. runner_cls attribute is deprecated.
Expand ${PROJECT_ROOT} in source URLs. ( #2846 )
Fix env and other options being inherited in nested composite scripts. ( #2849 )
Keep the ${PROJECT_ROOT} variable in dependencies after running pdm lock --update-reuse . ( #2852 )
Make direct_minimal_versions work on newly added dependencies. ( #2853 )
Fix a syntax error in the zsh completion script. ( #2868 )
Disable check update in zsh completion script.
Disable check update in zsh completion script. ( #2838 )
Fixes cached packages metadata files ( .referrers ) collisions on sync when using a venv with symlink cache method. ( #2839 )
Packages format preferences can now be defined in the project pyproject.toml using the no-binary , only-binary and prefer-binary keys of the tool.pdm.
Don't create project and virtualenv when running pdm python install . ( #2809 )
Clean up the python installation directory if a previous download was unsuccessful. ( #2810 )
Don't cache editable installations. ( #2816 )
Fix a bug that installing in-project plugins with editable local paths doesn't work. ( #2820 )
Don't create log directory until it's needed, to fix a PermissionError in docker environment. ( #2825 )
Fix recursive script detection on multiple invocations. ( #2829 )
Your coding agent can read these notes before it upgrades. Set up the MCP server →