PDM

What PDM is
PDM is a free Python package and dependency manager that supports current PEP standards. It resolves dependencies and records package versions, artifact hashes, dependencies, and environment markers in a lockfile, normally pdm.lock. It supports its own lock format and an experimental PEP 751 pylock format. PDM can create projects or initialize existing ones with pyproject.toml, and manage dependencies in virtual environments or a __pypackages__ directory. It handles packages from local paths, direct web URLs, and version-control repositories including Git, Mercurial, Subversion, and Bazaar. Other capabilities include a PEP 517 build backend, PEP 621 project metadata, plugins, user scripts, and optional centralized installation caching. PDM can import projects from Pipenv, Poetry, Flit, requirements.txt, and setuptools setup.py inputs. It runs on Windows, Linux, and macOS, and lists installation options including installer scripts, Homebrew, Scoop, uv, pipx, pip, and asdf. The recommended installation documentation calls for Python 3.10 or later, while the Python-script installation section says Python 3.9 or later.
Who it suits
PDM suits Python developers who want dependency resolution and lockfiles, project metadata support, or migration from other project inputs. It is available for Windows, Linux, and macOS.
What it does well
- Free to use
- Supports dependency locking
- Can initialize projects with pyproject.toml
- Works with several version-control sources
- Can import from Pipenv and Poetry
What to know first
- PEP 582 support is experimental and opt-in
- Installation documentation gives different Python minimums
- PEP 751 lockfile format is experimental
Limits
PEP 582 support is experimental and must be enabled separately. The recommended installation documentation requires Python 3.10 or higher, while the Python-script installation section supports Python 3.9 or higher.
Getting started
- Open the PDM website
- Install PDM with an installer script or a supported tool such as Homebrew, Scoop, uv, pipx, pip, or asdf
- Use Python 3.10 or newer for the recommended installation path
- Create a project or initialize an existing project with pyproject.toml
- Choose a virtual environment or a __pypackages__ directory for dependencies
Verdict
PDM brings project setup, dependency management, locking, and publishing into a Python-focused tool. Note the experimental status of PEP 582 and PEP 751 support, and check the installation instructions for the Python version relevant to your method.
Questions
Is PDM free?
Yes. PDM has a free plan and no free trial.
Which operating systems does PDM support?
PDM works on Windows, Linux, and macOS.
Which Python versions are supported?
The recommended installation documentation requires Python 3.10 or higher. Its Python-script installation section says Python 3.9 or higher.
Does PDM support dependency lockfiles?
Yes. It normally stores locked resolution in pdm.lock and also supports an experimental PEP 751 pylock format.
Can PDM publish packages?
Yes. The pdm publish command builds wheel and source distributions and uploads them to PyPI by default, or to another repository.
Can PDM migrate existing projects?
Its import command supports Pipenv, Poetry, Flit, requirements.txt, and setuptools setup.py inputs.
Facts from PDM's own pages
- Build backend
- PDM can act as a PEP 517 build backend. · pdm-project.org, 3 Oct 2026
- Credential storage
- When keyring is available and supported, PDM stores and retrieves package index and upload repository passwords through keyring. · pdm-project.org, 3 Oct 2026
- Dependency locking
- PDM synchronizes dependencies using a locked resolution, normally stored in pdm.lock, which records package versions, artifact hashes, dependencies and markers. · pdm-project.org, 2 Oct 2026
- Dependency resolution
- PDM provides a dependency resolver described as simple and fast, particularly for large binary distributions. · pdm-project.org, 2 Oct 2026
- Environment options
- PDM can use a virtual environment or install project dependencies into a __pypackages__ directory. · pdm-project.org, 2 Oct 2026
- Experimental feature
- PEP 582 support is experimental and opt-in, alongside virtual environment management. · pdm-project.org, 3 Oct 2026
- Free plan
- Yes · pdm-project.org, 21 Sept 2026
- Installation cache
- PDM offers an opt-in centralized installation cache. · pdm-project.org, 3 Oct 2026
- Installation methods
- The documentation lists installer scripts and installation through Homebrew, Scoop, uv, pipx, pip and asdf. · pdm-project.org, 3 Oct 2026
- Lockfile support
- Yes · pdm-project.org, 21 Sept 2026
- Lock formats
- PDM supports its native pdm lock format and experimental PEP 751 pylock format. · pdm-project.org, 2 Oct 2026
- Metadata
- PDM supports project metadata in the PEP 621 format. · pdm-project.org, 3 Oct 2026
- Migration
- PDM's import command supports Pipenv, Poetry, Flit, requirements.txt and setuptools setup.py project inputs. · pdm-project.org, 2 Oct 2026
- Offline installation
- Yes · pdm-project.org, 21 Sept 2026
- Package formats
- wheel,sdist · pdm-project.org, 21 Sept 2026
- Package sources
- PDM can use PyPI and configurable custom package indexes or repositories, with options to verify SSL certificates. · pdm-project.org, 3 Oct 2026
- Plugins
- PDM has a flexible plug-in system. · pdm-project.org, 2 Oct 2026
- Plugins and scripts
- PDM provides a plug-in system and user scripts. · pdm-project.org, 3 Oct 2026
- Private registry auth
- Yes · pdm-project.org, 21 Sept 2026
- Product
- PDM is a Python package and dependency manager that supports current PEP standards. · pdm-project.org, 2 Oct 2026
- Project metadata
- PDM supports PEP 621 project metadata. · pdm-project.org, 2 Oct 2026
- Project setup
- PDM can create a new project or initialize an existing one with a pyproject.toml file. · pdm-project.org, 2 Oct 2026
- Publishing
- The pdm publish command builds a wheel and source distribution and uploads them to PyPI by default, and can target another repository. · pdm-project.org, 3 Oct 2026
- Purpose
- PDM is a Python package and dependency manager that supports current PEP standards. · pdm-project.org, 3 Oct 2026
Where PDM stands on Freedom251
- Package Managers#30 of 93
- Python Package Managers#20 of 27
