Python 项目应该放弃requirements.txt?揭秘PDM的强大功能

目录

requirements.txt的局限性

[PDM 的优势](#PDM 的优势)

[如何使用 PDM](#如何使用 PDM)

[安装 PDM](#安装 PDM)

初始化项目

添加依赖

管理依赖

示例代码

初始化项目并添加依赖

[编写简单的 Flask 应用](#编写简单的 Flask 应用)

运行应用

PDM高级功能

多环境管理

脚本管理

发布包


在 Python 项目中管理依赖项,最常见的方式是使用 requirem)ents.txt 文件。但最近有一种新的包管理工具------PDM (Python Development Master),它提供了更现代化、更便捷的依赖管理方式。

requirements.txt的局限性

requirements.txt 是一个纯文本文件,它列出了所有依赖包的名称和版本。虽然简单,但它有以下几个缺点:

  • 缺乏灵活性:无法方便地处理不同环境下的依赖。

  • 手动管理麻烦:需要手动更新和管理依赖,容易出错。

  • 依赖解析不够智能:难以应对复杂的依赖树。

PDM 的优势

PDM基于PEP 582规范,采用了一种称为"局部包目录"的新方法。通过在项目目录下创建__pypackages__文件夹,PDM将所有的包安装到这个文件夹中,从而实现环境隔离。这样,每个项目都有独立的依赖环境,不会相互干扰。

它的优势包括:

  • 自动化管理:PDM 可以自动解析和管理依赖,减少手动操作。

  • 环境隔离:每个项目都有独立的包环境,避免依赖冲突。

  • 支持 PEP 582 :无需虚拟环境,依赖安装在项目的 __pypackages__ 目录下。

如何使用 PDM

安装 PDM

首先,我们需要安装 PDM。可以使用 pip 或直接从源码安装:

复制代码
pip install pdm

初始化项目

在项目目录下运行以下命令来初始化 PDM 项目:

复制代码
pdm init

这将创建一个 pyproject.toml 文件,用于管理项目的元数据和依赖。

添加依赖

使用以下命令添加项目依赖:

复制代码
pdm add requests

PDM 会自动将 requests 依赖添加到 pyproject.toml 文件中,并安装到项目的 __pypackages__ 目录下。

管理依赖

PDM 还提供了一些方便的命令来管理依赖:

  • 更新依赖pdm update

  • 移除依赖pdm remove package_name

  • 列出依赖pdm list

示例代码

我们来看看一个实际的示例代码,展示如何使用 PDM 管理依赖:

初始化项目并添加依赖

复制代码
pdm init
pdm add flask

编写简单的 Flask 应用

创建一个名为 app.py 的文件,写入以下代码:

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, PDM!"

if __name__ == '__main__':
    app.run(debug=True)

运行应用

使用以下命令运行应用:

复制代码
pdm run python app.py

打开浏览器,访问 http://127.0.0.1:5000,你将看到 "Hello, PDM!" 的欢迎页面。

PDM高级功能

多环境管理

PDM支持多环境管理,例如开发环境和生产环境:

复制代码
pdm add requests --dev
pdm add gunicorn --prod

脚本管理

你可以在pyproject.toml中定义常用脚本:

复制代码
[tool.pdm.scripts]
start = "python app.py"

然后使用命令运行:

复制代码
pdm run start

发布包

PDM还支持包发布,你可以轻松将你的项目发布到PyPI:

复制代码
pdm publish

requirements.txt只提供了静态依赖管理,这意味着你需要手动更新每个依赖包的版本。而PDM则引入了动态依赖管理,它可以根据项目需求自动调整依赖版本。

PDM 作为一种现代化的依赖管理工具,提供了更灵活、更便捷的依赖管理方式。通过 PDM,你可以摆脱 requirements.txt 的束缚,更高效地管理 Python 项目依赖。

|--------------------------------------------------------------------------------------------------------------------------------------------------|
| 用Python比较对象==与is,你还在用==?out啦,来看这个!-CSDN博客 |
| httpcore,一个小巧灵活的 python 库-CSDN博客 |
| Python pickle,网络数据传输就得这么玩-CSDN博客 |
[作者推荐]

相关推荐
Highcharts.js1 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
测试员周周5 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
测试19985 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
曲幽8 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
杜子不疼.8 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号38 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia9 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码9 小时前
C++ 内存分区 堆区
java·开发语言·c++
前端若水9 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
无风听海9 小时前
C# 隐式转换深度解析
java·开发语言·c#