MCPcopy Index your code
hub / github.com/pdm-project/pdm

github.com/pdm-project/pdm @2.28.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.28.0 ↗ · + Follow
2,435 symbols 10,848 edges 227 files 464 documented · 19% updated 5d ago2.28.0 · 2026-06-23★ 8,64847 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PDM

一个现代的 Python 包管理器,支持 PEP 最新标准。English version README

PDM logo

Docs Twitter Follow Discord

Github Actions PyPI codecov Packaging status Downloads pdm-managed

asciicast

这个项目是啥?

PDM 旨在成为下一代 Python 软件包管理工具。它最初是为个人兴趣而诞生的。如果你觉得 pipenv 或者 poetry 用着非常好,并不想引入一个新的包管理器,那么继续使用它们吧;但如果你发现有些东西这些 工具不支持,那么你很可能可以在 pdm 中找到。

主要特性

  • 一个简单且相对快速的依赖解析器,特别是对于大的二进制包发布。
  • 兼容 PEP 517 的构建后端,用于构建发布包 (源码格式与 wheel 格式)
  • 灵活且强大的插件系统
  • PEP 621 元数据格式
  • 功能强大的用户脚本
  • 支持从 astral-sh's python-build-standalone 安装 Python。
  • pnpm 一样的中心化安装缓存,节省磁盘空间

与其他包管理器的比较

Pipenv

Pipenv 是一个依赖管理器,它结合了 pipvenv,正如其名称所暗示的。它可以从一种自定义格式文件 Pipfile.lockPipfile 中安装软件包。 然而,Pipenv 并不处理任何与构建、打包和发布相关的工作。所以它只适用于开发不可安装的应用程序(例如 Django 网站)。 如果你是一个库的开发者,无论如何你都需要 setuptools

Poetry

Poetry 以类似于 Pipenv 的方式管理环境和依赖,它也可以从你的代码构建 .whl 文件,并且可以将轮子和源码发行版上传到 PyPI。 它有一个漂亮的用户界面,用户可以通过贡献插件来定制它。Poetry 使用 pyproject.toml 标准。

Hatch

Hatch 也可以管理环境,并允许每个项目有多个环境。默认情况下,所有环境会放在一个中心位置,但也可以配置为将项目环境放在项目根目录中。它可以管理包,但不支持 lockfile。Hatch 也可以用来打包一个项目(用符合 PEP 621 标准的 pyproject.toml 文件)并上传到 PyPI。

本项目

PDM 也可以像 Pipenv 那样在项目或集中的位置管理 venvs。它从一个标准化的 pyproject.toml 文件中读取项目元数据,并支持 lockfile。用户可以在插件中添加更多的功能,并将其作为一个发行版上传,以供分享。

此外,与 Poetry 和 Hatch 不同,PDM 并没有和任何特定的构建后端绑定,你可以选择任何你喜欢的构建后端。

安装

Packaging status

PDM 需要 Python 3.10 或更高版本。你也可以从 release assets 下载独立的可执行文件来使用。

推荐:通过脚本安装二进制

优先使用预构建的独立二进制,直接运行安装脚本即可:

Linux/Mac 安装命令

curl -sSL https://pdm-project.org/install.sh | bash

Windows 安装命令

powershell -ExecutionPolicy ByPass -c "irm https://pdm-project.org/install.ps1 | iex"

其他安装方式(Python 安装脚本、包管理器等)请查看安装文档

快速上手

初始化一个新的 PDM 项目

pdm new my-project

按照指引回答提示的问题,一个 PDM 项目和对应的pyproject.toml文件就创建好了。

添加依赖

pdm add requests flask

你可以在同一条命令中添加多个依赖。稍等片刻完成之后,你可以查看pdm.lock文件看看有哪些依赖以及对应版本。

徽章

在 README.md 中加入以下 Markdown 代码,向大家展示项目正在使用 PDM:

[![pdm-managed](https://img.shields.io/endpoint?url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fpdm-project%2F.github%2Fbadge.json)](https://pdm-project.org)

pdm-managed

PDM 生态

Awesome PDM 这个项目收集了一些非常有用的 PDM 插件及相关资源。

实验性功能

为项目启用 PEP 582

pdm config python.use_venv False

这会让 PDM 将包安装到项目本地目录,而不是 venv 中(类似于 npm 安装到 node_modules)。

启用 uv 集成:

pdm config use_uv true

uv 是一个使用 Rust 编写的非常快的 Python 包安装器。

注意:uv 不能与 PEP 582 一起使用。

赞助

<a href="https://cdn.jsdelivr.net/gh/pdm-project/sponsors/sponsors.svg">
    <img src="https://cdn.jsdelivr.net/gh/pdm-project/sponsors/sponsors.svg"/>
</a>

鸣谢

本项目的受到 pyflowpoetry 的很多启发。

使用许可

本项目基于 MIT 协议开源,具体可查看 LICENSE

Core symbols most depended-on inside this repo

get
called by 308
src/pdm/models/venv.py
add_argument
called by 189
src/pdm/cli/options.py
exists
called by 170
src/pdm/project/toml_file.py
add_dependencies
called by 146
src/pdm/project/core.py
echo
called by 113
src/pdm/termui.py
items
called by 105
src/pdm/compat.py
write
called by 105
src/pdm/termui.py
startswith
called by 92
src/pdm/models/versions.py

Shape

Function 1,103
Method 1,069
Class 234
Route 29

Languages

Python100%
TypeScript1%

Modules by API surface

src/pdm/project/core.py73 symbols
tests/cli/test_run.py67 symbols
src/pdm/pytest.py65 symbols
tests/test_utils.py64 symbols
src/pdm/models/requirements.py50 symbols
tests/cli/test_list.py47 symbols
src/pdm/utils.py47 symbols
tests/cli/test_lock.py46 symbols
tests/test_project.py44 symbols
src/pdm/models/candidates.py43 symbols
src/pdm/models/caches.py40 symbols
src/pdm/cli/utils.py40 symbols

Dependencies from manifests, versioned

blinker
certifi2021.10.8 · 1×
charset-normalizer2.0.7 · 1×
click7.1.2 · 1×
dep-logic0.5 · 1×
flask1.1.4 · 1×
idna3.3 · 1×
installer1 · 1×
itsdangerous1.1.0 · 1×
jinja22.11.3 · 1×
markupsafe1.1.1 · 1×

For agents

$ claude mcp add pdm \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact