Python 项目及依赖管理工具技术选型

news2024/11/15 11:00:23

Python 项目及依赖管理工具,类似于 Java 中的 Maven 与 Node 中的 npm + webpack,在开发和维护项目时起着重要的作用。使用适当的依赖管理工具可以显著提高开发效率,减少依赖冲突,确保项目的稳定性、可靠性和安全性。

一、常见项目及依赖管理工具需具备的功能

1. 依赖管理

(1)自动化依赖安装

依赖管理工具可以自动安装项目所需的所有依赖包,而不需要手动逐个安装。

(2)依赖版本控制

这些工具允许开发者指定和锁定依赖包的版本,确保项目在不同环境中运行时依赖的一致性

2. 虚拟环境管理

虚拟环境允许在同一台机器上运行多个项目,而不会发生依赖冲突。依赖管理工具通常会自动创建和管理虚拟环境,确保项目依赖的隔离性。

3. 依赖冲突解决

依赖管理工具可以自动解决依赖冲突,确保安装的依赖包版本兼容。例如,pipenv 和 poetry 都有内置的依赖冲突解决机制。

4. 安全性检查

一些工具(如 pipenv)提供了内置的安全性检查功能,可以扫描依赖包的已知漏洞,并提供修复建议。

# 使用 pipenv 进行安全性检查
pipenv check

5. 项目初始化和模板

一些工具(如 poetry 和 hatch)提供了项目模板和脚手架功能,帮助开发者快速创建新项目。

6. 发布依赖包

一些工具(如 poetry)内置了包发布功能,可以方便地将项目发布到 PyPI(Python Package Index)。

# 使用 poetry 发布包
poetry publish --build

7. 生成依赖配置文件

部分依赖管理工具可以生成描述项目依赖的文件,方便团队协作和部署。例如,pip-tools 可以生成 requirements.txt 文件。

8. 版本管理

这是指如何管理和控制你的项目版本。每次发布新版本时,你需要更新项目的版本号(如从 1.0.0 到 1.1.0),并确保版本号的变化遵循一定的规则(如语义化版本控制)。

版本管理工具可以帮助你自动更新版本号、生成变更日志、创建发布标签等。

二、常见工具及其技术对比

常见 Python 项目及依赖管理工具,包括 Pipenv、Poetry、Conda、Pip-tools 、Hatch)和 venv。以下从工具简介、特性介绍、功能对比及流行度三方面进行对比。

1. 工具简介

(1)Pipenv

Pipenv 一度被官方推荐为 Python 项目的依赖管理工具,尤其是在需要自动管理虚拟环境和依赖锁定的场景中。然而,随着时间的推移,它的热度有所下降。

(2)Poetry

Poetry 近年来越来越流行,尤其在需要现代化依赖管理和包发布的项目中。它提供了更好的用户体验和更强大的功能。

(3)CondaConda 在数据科学和机器学习领域非常流行,因为它不仅支持 Python,还支持 R 和其他语言,并且其环境管理功能非常强大。

(4)Pip-tools

Pip-tools 在一些需要精确控制依赖版本的项目中很受欢迎,尤其是那些仍然使用 requirements.txt 的项目。

(5)Hatch

Hatch 是一个相对较新的工具,虽然功能强大,但目前还没有达到 Poetry 或 Conda 的流行度。

(6)venv

venv 是 Python 标准库中的模块,用于创建轻量级的虚拟环境,方便项目间的依赖隔离。

2. 特性介绍

3. 功能对比

4. 流行度

当前(2024 年 7 月 30 日)各工具流行度,如下:

三、结论

从上述技术对比来看,无论是功能特性还是流程程度,Poetry 都是当前最适合新 Python 项目的依赖管理工具。不过,部分其他工具也有一定适用场景,如 Pip-tools 适用于有 requirements 的老项目,Conda 适用于多编程语言项目。

四、VS pip

以 poetry 为例,简要介绍上述项目及包依赖管理工具与 pip 的区别。 pip 是一个轻量级的包管理工具,适合简单的包安装和管理任务。 poetry 是一个功能强大的项目管理工具,适合需要全面管理项目依赖和配置的场景。

1. 功能对比

2. 使用示例

(1)pip

# 安装包
pip install requests

# 列出安装的包
pip freeze > requirements.txt

# 从 requirements.txt 安装包
pip install -r requirements.txt

(2)poetry

# 创建新项目
poetry new myproject

# 进入项目目录
cd myproject

# 安装包
poetry add requests

# 安装所有依赖
poetry install

# 启动虚拟环境
poetry shell

3. 建议

示例项目可用 Python 自带的 pip,简单易用。大型线上生产项目需要做好依赖管理、依赖冲突解决、虚拟环境管理等工作,以保证项目在多种环境下交付一致且稳定运行,poetry 之类的项目及包管理工具更合适的选择。

文章转载自:曾左

原文链接:https://www.cnblogs.com/zengzuo613/p/18386370

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

怎样把图片转换成pdf文件?分享图片转PDF的九个转换方法(新)

图片转为pdf怎么弄?图片和pdf是两种完全不同的文件类型,图片转pdf的是一个比较常见的格式转换需求,尤其是需要分享图片合集时。 图片转换成pdf文件可以借助专业的pdf转换器实现,只需要简单几个步骤就能轻松搞定。无论是图片转pdf&…

北斗系统助力低空经济腾飞:未来发展无限可能

近年来,随着科技的飞速发展,北斗卫星导航系统(Beidou Satellite Navigation System, BDS)在我国乃至全球范围内的应用日益广泛。尤其在低空经济领域,北斗系统作为新基建的重要组成部分,正在发挥着不可替代的…

JMeter之上传文件同时带有参数

文章目录 业务场景使用坑 业务场景 针对下述接口构建jmeter测试&#xff0c;这是个post接口&#xff0c;在上传文件file的同时指定变量groupId的值 PostMapping("/importExcel")public ApiResultDto<String> importExcel(TagChildrenImportDto importDto) {Sec…

Python中对象操作函数

Python中的对象操作函数包括help()、dir()、type()、ascii()等。 1 help()函数 help()函数可以查看指定函数的帮助信息&#xff0c;使用方法如图1所示。 图1 help()函数的使用方法 图1中所示的代码查看了“sorted”函数的帮助信息&#xff0c;包括该函数的作用、参数以及返回…

x264 编码器 AArch64汇编系列:DCT 变换相关汇编函数

DCT变换 在x264_dct_init函数中初始化具体的 dct 实现函数。 4x4 块DCT 变换 c 语言版本实现 4x4DCT 变换函数:sub4x4_dct。pixel_sub_wxh 函数: 这个函数的作用是从两个像素块中减去一个像素块,得到差分值,这些差分值将用于DCT变换。参数: diff:指向存储结果差分值的数组…

高标准城市照明智能化应用,创新城市节能之光

项目背景 在国家推动节约型、智慧化发展的背景下&#xff0c;该城市照明系统亟需智能化升级&#xff0c;以解决现有依赖传统时控器的局限性、能源浪费与照明不足的矛盾&#xff0c;以及依赖人工巡查和市民反馈的低效率、高成本维护等问题。通过引入智能控制系统&#xff0c;实现…

RKNPU2从入门到实践 --- 【10】RKNPU2零拷贝API实现RKNN模型在RK3588开发板上的部署

目录 一、为什么叫零拷贝API&#xff1f; 二、零拷贝API执行流程&#xff08;代码解读&#xff09; 2.1 前奏工作 2.2 main.cc文件的编写&#xff08;代码的编写&#xff09; 2.2.1 第一步&#xff1a;rknn_init接口创建rknn_context对象、加载RKNN模型 2.2.2 第二步…

产品概述Tektronix泰克TCP0030A电流探头TCP0030原装二手

产品概述 Tekronix TCP0030 AC/DC 电流探头是一款高性能且易于使用的探头&#xff0c;它通过可选测量范围增强了带宽&#xff0c;同时还提供了低电流测量能力和精度。Tektronix TCP0030 探头专为具有 TekVPI 探头接口的示波器而设计。 Tektronix TCP0030 AC/DC 电流探头的功能…

浏览器播放RTSP流,支持H264、H265等格式,支持IE、Chrome等浏览器

目录 背景 解决方案 效果 代码 前端代码 后端代码 下载 背景 项目中需要在浏览器中播放RTSP流&#xff0c;实在是不想折腾ActiveX控件 1、麻烦&#xff08;开发麻烦、使用时设置也麻烦&#xff09; 2、非IE浏览器不兼容 解决方案 使用OpenCvSharpNancy写一个解码服…

uniapp秋云图表报错json underfind的原因

如果在使用秋云图表 出现报错 以及只有第一次能够渲染正确的图表 后续刷新都不显示 那么大概率都是因为在刷新页面数据的时候 图标组件自己先执行了一遍&#xff0c;导致在第一遍的时候找不到值而报错 如图所示 只需要在加载数据的时候 加个延时 就可以很好的解决这个问题

记录一下腾讯云即时通信IM(无UI集成)、TRTC做文字、语音、图片、实时音视频聊天遇到的问题

文章目录 简单记录一下通讯IM和TRTC的一些坑&#xff1a;&#xff08;有其他坑再补充......&#xff09;isReady() 一直返回falseSDK_READY监听有时候会不触发getConversationList拉取会话&#xff0c;消息数据里的cloudCustomData经常会丢移动端发图片消息总是卡顿im里的信令消…

SpringBoot+redis+aop处理黑白名单

提示&#xff1a;SpringBootredisaop处理黑白名单 文章目录 目录 文章目录 1.导包 2.配置文件 3.代码 1.返回类型 2.redis 3.redisUtils 4.controller 5.AOP 6.具体实现 4.APIFox压力测试 1.导包 <dependencies><dependency><groupId>org.springf…

Mybatis基础操作学习

文章目录 实施前的准备工作&#xff1a;基础操作演示删除新增修改&#xff08;更新&#xff09;查询条件查询 实施前的准备工作&#xff1a; 准备数据库表创建一个新的springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;mybatis、mysql驱动、lombok&#xff09;ap…

C语言初阶 --- 数据在内存中的存储

&#x1f388; 个人主页&#x1f449;&#xff1a;tbRNA-CSDN博客 &#x1f4af; 个人简介&#xff1a;在校大学生一枚&#x1f48b;. &#x1f60d; 希望我的文章对大家有着不一样的帮助&#xff0c;欢迎大家关注我&#xff0c;感谢大家的多多支持&#xff01; &#x1f389; …

chapter09-OOP高级部分——(final关键字)——day12

目录 394-final基本使用 395-final使用细节1 396-final使用细节2 397-final课堂练习 394-final基本使用 395-final使用细节1 396-final使用细节2 397-final课堂练习 一、 二、 x&#xff1b;相当于修改final x的值&#xff0c;不可以 return x1&#xff1b;这里是可以的

【红队技巧】.Net免杀 绕过主流杀软

【技巧】.Net免杀 绕过主流杀软 前言 最近执行任务时&#xff0c;需要动用自己的免杀知识却发现它们不再生效&#xff0c;于是就有了本文。这次对windows api和C#又有了比在thm​学习时更深的认识和了解。 C#动态加载LoadLinrary受限绕过EnumWindows函数执行shellcode C#动…

Theadlocal是什么?有哪些使用场景?底层实现是什么?

首先在线程里有一个ThreadlocalMap这个变量&#xff0c;在我们调用threadlocal.set&#xff08;&#xff09;方法的时候其实就是操作当前线程的ThreadlocalMap&#xff0c;将threadlocal放到key上将threadlocal的值存入value中。 这是set方法的具体实现。 需要注意的是&#x…

普元Devops-在云主机上拉取harbor的docker镜像并部署

1 前言 本文讲解如何从普元Devops配置构建&#xff0c;从而实现在云主机上拉取Docker镜像&#xff0c;然后运行Docker容器&#xff0c;实现云主机的Docker部署。 2 主要步骤说明 首先&#xff0c;我们有一个Devops服务器&#xff0c;还有一个云主机服务器&#xff0c;还有一个…

springboot+redis+mybatis体会布隆过滤器

1.建立数据库表和对应实体类 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,uname varchar(50) DEFAULT NULL,usex varchar(20) DEFAULT NULL,uage int(11) DEFAULT NULL,PRIMARY KEY (id) USING BTREE ) ENGINEInnoDB AUTO_INCREMENT1319 DEFAULT CHARSETutf8 ROW_…

美国硅谷多ip服务器用途广吗?

美国硅谷多IP服务器的用途广泛&#xff0c;涉及多个行业和应用场景&#xff0c;包括站群运营、SEO优化、游戏代理、软件开发、数据分析、科学研究、电子商务、在线营销、虚拟主机和云服务等。具体分析如下&#xff0c;rak小编为您整理发布美国硅谷多ip服务器用途广吗的相关内容…