Skip to content

PDM: Python Package and Dependency Manager

A Python package and dependency manager. PDM implements modern Python packaging standards like PEP 517/518 and uses PEP 621 metadata in pyproject.toml.

While PDM is a capable tool, consider using uv instead for better performance, simpler workflows, and unified tooling across Python package/environment management.

Key Features

  • PEP 582 local package directory support (experimental)
  • Dependency management with lockfile support
  • Virtual environment management
  • Build backend for packaging projects
  • Plugin system for extensibility

pdm-backend

pdm-backend is PDM’s build backend, distributed as a separate package. It can be used independently of the pdm CLI in any Python project, including uv projects:

uv init --build-backend pdm my-lib

This generates a pyproject.toml with pdm-backend as the build backend:

[build-system]
requires = ["pdm-backend"]
build-backend = "pdm.backend"

pdm-backend supports editable installs, dynamic versioning from SCM tags, and file inclusion/exclusion patterns. It reads standard PEP 621 metadata from pyproject.toml.

See the pdm-backend documentation for configuration options.

Using uv as the installer

PDM has experimental support for using uv as its resolver and installer. Enable it with:

pdm config use_uv true

PDM will detect the uv binary on your system and use it for dependency resolution and installation. This is faster than PDM’s default installer, without changing the rest of your PDM workflow. See How to use uv to speed up PDM for a full walkthrough, or the PDM uv documentation for limitations.

Pros

  • Modern standards compliance (PEP 517/518/621)
  • No need to create/activate virtual environments
  • Supports dependency groups
  • Fast dependency resolver
  • Lockfile support

Cons

  • Limited adoption compared to other tools
  • Less mature than alternatives
  • PEP 582 support is experimental
  • No integrated Python version management
  • No automated package publishing workflow

Learn More

Get Python tooling updates

Subscribe to the newsletter
Last updated on

Please submit corrections and feedback...