内容提要
PDM 2.0发布了多个重要新特性,包括将虚拟环境设为默认、支持多种PEP 517后端、移除可编辑包依赖、重新定位全局配置、增加pdm publish命令以及改进用户界面。同时,增强了用户脚本功能和钩子支持,提升了稳定性和灵活性。PDM旨在成为全面的Python项目管理工具,支持最新的打包标准。
延伸解读
虚拟环境成为默认:兼容性与迁移考量
PDM 2.0 将虚拟环境设为默认,主要因为 PEP 582 仍处于草案阶段,且虚拟环境在 IDE 和工具中支持更好。对于新项目,pdm init 时会询问是否创建虚拟环境;对于已有项目,若存在 __pypackages__ 目录,则继续使用 PEP 582 布局,否则创建虚拟环境。这一变化旨在平衡新旧项目,但用户需注意默认行为的改变可能影响现有工作流。
拥抱标准:与其他 PEP 517 后端协作
PDM 2.0 不再绑定自有的 pdm-pep517 后端,支持 flit-core、hatchling、setuptools 等只要支持 PEP 621 元数据读取的后端。这意味着你可以用 flit 构建打包,而用 PDM 管理依赖,实现工具共存。这种基于标准的互操作性降低了锁定风险,让开发者能灵活选择最适合的工具链。
可编辑依赖调整与全局配置迁移
为符合 PEP 631,PDM 2.0 不再允许在 [project]:dependencies 中直接包含可编辑包(如 -e ./mypackage),但可编辑包仍可放在 [tool.pdm.dev-dependencies] 中,因为其主要用于开发。同时,全局配置从 ~/.pdm 迁移至 $CONFIG_HOME(如 Linux 的 ~/.config/pdm),用户需手动复制旧配置以完成迁移。
增强的脚本与钩子:自动化与灵活性
PDM 2.0 增强了用户脚本功能,支持复合脚本(按顺序执行多个脚本,任一失败则整体失败),并允许脚本作为根命令运行(如 pdm start)。新增 pre_publish、post_publish、pre_run、post_run 等钩子,便于插件开发。通过 --skip 选项可跳过特定钩子或脚本,例如 pdm install --skip pre_install。这些改进提升了自动化流程的灵活性和可控性。
Q&A
PDM 2.0的默认设置是什么?
PDM 2.0将虚拟环境设为默认设置,以提高IDE和工具的兼容性。
PDM 2.0支持哪些包管理后端?
PDM 2.0支持多种PEP 517后端,包括flit-core、hatchling和setuptools。
PDM 2.0中移除了什么功能?
PDM 2.0移除了项目依赖中的可编辑包,符合PEP 631规范。
如何使用PDM 2.0发布项目?
可以使用pdm publish命令,PDM会自动打包项目并上传到PyPI。
PDM 2.0的用户界面有什么改进?
PDM 2.0的用户界面使用rich库进行了改进,提供了更好的用户体验。
PDM 2.0如何增强用户脚本功能?
PDM 2.0增强了用户脚本功能,支持复合脚本和更多钩子,提升了灵活性。