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

目录

requirements.txt的局限性

PDM 的优势

如何使用 PDM

安装 PDM

初始化项目

添加依赖

管理依赖

示例代码

初始化项目并添加依赖

编写简单的 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 的文件,写入以下代码:

from flask import Flaskapp = 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博客

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android APP memory统计方法

目录 进程的内存信息概述 关键的术语 测试步骤 测试步骤 数据处理 数据分析: 进程内存信息 Dumpsys meminfo -a PID Procrank Procmem PID 特殊内存信息 Mali ION(multi-media,gralloc) 进程地址空间信息 /proc/pid/smaps Showmap PID …

随笔-来了,安了

依照领导定的规矩,周五又去了分公司,赋能一线去了。到了地方就是开会->现场解决问题->干饭->开会过需求、提供解决方案,充实得厉害。强度也不小,中午干的一大碗饭,到五点就饿了。 六点带着分公司催着上线的需…

5000天后的世界

为何可以预见未来 1993年,在互联网的黎明时代,凯文凯利创办了《连线》杂志。他曾经采访过以比尔盖茨、史蒂夫乔布斯、杰夫贝佐斯为代表的一众风云创业家。《连线》杂志是全球发行的世界著名杂志,一直致力于报道科学技术带来的经济、社会变革…

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法,它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特,强大,而且使用更为方便,目前检测少,强烈推荐!!&a…

Google Earth Engine(GEE)——计算闪闪红星的ndvi的值和折线图(时序分析)

函数: ui.Chart.image.doySeries(imageCollection, region, regionReducer, scale, yearReducer, startDay, endDay)

手把手教你改造Sentinel Dashboard 实现配置持久化

一. 概述 Sentinel客户端默认情况下接收到 Dashboard 推送的规则配置后,可以实时生效。但是有一个致命缺陷,Dashboard和业务服务并没有持久化这些配置,当业务服务重启后,这些规则配置将全部丢失。 Sentinel 提供两种方式修改规则…

政务云参考技术架构

行业优势 总体架构 政务云平台技术框架图,由机房环境、基础设施层、支撑软件层及业务应用层组成,在运维、安全和运营体系的保障下,为政务云使用单位提供统一服务支撑。 功能架构 标准双区隔离 参照国家电子政务规范,打造符合标准的…

B3981 [信息与未来 2024] 图灵完备

题目描述 (你不需要看懂这张图片;但如果你看懂了,会觉得它很有趣。) JavaScript 是一种功能强大且灵活的编程语言,也是现代 Web 开发的三大支柱之一 (另外两个是 HTML 和 CSS)。灵活的 JavaScript 包含“自动类型转换…

从数据库到数据仓库:数据仓库导论

导言 本文为数据仓库导论,旨在介绍数据仓库的基本理念和应用场景,帮助读者理解数据仓库的重要性及其在企业中的实际应用。 数据仓库作为重要的数据管理和分析工具,已经发展了30多年,其过程中生态和技术都发生了巨大的变化。尽管…

分布式数据库核心问题和解决方法

当下,由于成本压力以及数据保护的要求,采用国产数据库的呼声越来越高,但是国产数据库数量众多,良莠不齐,没有选择数据库比较靠谱的标准,业内真正懂得数据库的人很少,且为了这块大的蛋糕&#xf…

Axios进阶

目录 axios实例 axios请求配置 拦截器 请求拦截器 响应拦截器 取消请求 axios不仅仅是简单的用基础请求用法的形式向服务器请求数据,一旦请求的端口与次数变多之后,简单的请求用法会有些许麻烦。所以,axios允许我们进行创建axios实例、ax…

Retrofit 注解参数详解

添加依赖 implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.0 初始化Retrofit val retrofit Retrofit.Builder().baseUrl("http://api.github.com/").addConverterFactory(GsonConverterFactory…

【Kafka】Kafka提高生产者吞吐量、数据可靠性-06

【Kafka】Kafka提高生产者吞吐量-06 1. 提高生产者吞吐量2.数据可靠性2.1 回顾数据的发送流程2.2 ack应答级别2.2.1 acks:02.2.2 acks:12.2.2 acks:-1(all)2.2.2.1 数据可靠性分析2.2.2.2 数据完全可靠 2.3 可靠性总结2.4 可靠性代码配置 1. 提高生产者吞吐量 import org.apach…

科技云报道:“元年”之后,生成式AI将走向何方?

科技云报道原创。 近两年,以大模型为代表的生成式AI技术,成为引爆数字原生最重要的技术奇点,人们见证了各类文生应用的进展速度。Gartner预测,到2026年,超过80%的企业将使用生成式AI的API或模型,或在生产环…

「实战应用」如何用图表控件LightningChart JS创建SQL仪表板应用(二)

LightningChart JS是Web上性能特高的图表库,具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用,从而实现高刷新率和流畅的动画,常用于贸易,工程,航…

OpenCore 引导完美升级

备份原有 OC (做好回滚的准备下载新版 OpenCore https://github.com/acidanthera/OpenCorePkg/releases将 1, 3, 4 里面的文件使用新版进行替换 4 里面的文件严格来说并不需要, 只是留着方便使用不追求完美到这就可以收工了将 OC 复制到 U 盘 EFI U 盘格式化可以使用: diskutil…

微服务开发与实战Day09 - Elasticsearch

一、DSL查询 Elasticsearch提供了DSL(Domain Specific Language)查询,就是以JSON格式来定义查询条件。类似这样: DSL查询可以分为两大类: 叶子查询(Leaf query clauses):一般是在特…

Docker Jenkins(改错版本)

Devops:它强调开发(Development)和运维(Operations)团队之间的协作.实现更快,更可靠的软件交付部署. JenKins是一个开源的自动化服务器,广泛用于构建,测试和部署软件项目.它是持续集成(CI)和持续交付/部署(CD)的工具.JenKins是实现DevOps实践的重要工具. 前端项目部署一般流程:…

Matlab|基于V图的配电网电动汽车充电站选址定容-可视化

1主要内容 基于粒子群算法的电动汽车充电站和光伏最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台:MATLAB 主要内容:代码主要做的是一个电动汽车充电站和分布式光伏的选址定容问题,提出了能够计及地理因素和服…

蓝队-溯源技巧

溯源技巧 大致思想 通常情况下,接到溯源任务时,获得的信息如下 攻击时间 攻击 IP 预警平台 攻击类型 恶意文件 受攻击域名/IP其中攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。 通过攻击类型分析攻击详情的请求包,看有没有攻击者…