内容提要
在Python项目开发中,PEP 582提出了一种新方法,通过使用本地包目录来简化依赖管理,避免了传统虚拟环境的复杂性。PDM是基于PEP 582的新包管理工具,支持简化依赖安装和版本锁定。
延伸解读
虚拟环境的嵌套与全局工具困境
文章指出虚拟环境在嵌套使用时问题突出:用虚拟环境中的Python安装Pipenv或Poetry,再用这些工具创建更多虚拟环境,当Python小版本更新时,需要逐一检查并升级所有虚拟环境。此外,性能分析工具和第三方REPL等全局工具无法跨虚拟环境工作,因为工具自身位于独立虚拟环境中,只能看到自己环境内的库,导致必须为每个项目重复安装。
PEP 582如何简化依赖管理
PEP 582提出在项目内使用__pypackages__目录,运行脚本时将该目录下的lib自动加入sys.path,使库可直接导入。与虚拟环境不同,它不绑定克隆的Python解释器,因此可以自由移动和复制。对于全局工具,只需保留一份,工具会自动加载目标项目内的__pypackages__,从而同时服务多个项目。
PDM的兼容性与版本锁定特点
PDM基于PEP 582,但并非强制使用,用户仍可选择传统虚拟环境。它能检测已有虚拟环境但不创建新的。PDM支持PEP 621元数据格式,使用与pip相同的依赖解析器,并具有插件系统。其版本锁定会尝试兼容项目的requires-python值,例如在同时支持Python 2.7和3.6+的项目中添加pytest时,PDM能成功锁定pytest 4.*,而Pipenv和Poetry则要求手动固定或升级Python版本。
Q&A
PEP 582是什么,它有什么作用?
PEP 582是一种提案,允许在Python项目中使用本地包目录来简化依赖管理,避免传统虚拟环境的复杂性。
PDM是什么,它如何与PEP 582相关联?
PDM是基于PEP 582的新包管理工具,旨在简化依赖安装和版本锁定,完全摆脱虚拟环境。
使用PEP 582有什么优势?
使用PEP 582可以避免虚拟环境的复杂性,简化依赖管理,并允许直接导入本地包目录下的库。
PDM如何处理依赖版本锁定?
PDM尝试锁定与项目要求的Python版本兼容的依赖版本,简化了版本管理过程。
PDM是否支持传统的虚拟环境?
PDM可以检测现有的虚拟环境,但不创建新的虚拟环境,用户可以选择使用PEP 582或传统虚拟环境。
PEP 582与Node.js的node_modules有什么相似之处?
PEP 582类似于Node.js的node_modules,都是为每个项目提供独立的包管理方式,避免了全局依赖冲突。