首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月29日 10:47

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

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

1. 依赖管理

(1)自动化依赖安装

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

(2)依赖版本控制

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

2. 虚拟环境管理

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

3. 依赖冲突解决

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

4. 安全性检查

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

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

5. 项目初始化和模板

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

6. 发布依赖包

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

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

7. 生成依赖配置文件

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

8. 版本管理

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

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

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

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

1. 工具简介

(1)Pipenv

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

(2)Poetry

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

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

(4)Pip-tools

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

(5)Hatch

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

(6)venv

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

2. 特性介绍

工具 主要使用场景 主要特性
Pipenv 一般项目,自动管理虚拟环境 自动创建和管理虚拟环境、依赖锁定文件(Pipfile.lock)、友好的 CLI 接口
Poetry 现代化项目,依赖管理和包发布 全面的依赖管理、内置虚拟环境管理、项目构建和发布、依赖解析和锁定
Conda 数据科学和机器学习 跨语言支持、强大的环境管理、包管理、支持多种平台(Windows, macOS, Linux)
Pip-tools 精确控制依赖版本的项目 生成和更新 requirements 文件、依赖锁定、与 pip 兼容
Hatch 现代化项目管理和版本控制 项目模板、环境管理、版本控制、依赖管理、灵活的插件系统
venv 基本虚拟环境管理 Python 内置模块,轻量级虚拟环境管理

3. 功能对比

功能 venv Pipenv Poetry Conda Pip-tools Hatch
创建虚拟环境
自动管理虚拟环境
依赖文件
版本锁定
安全性检查
包发布
依赖冲突解决
项目模板和脚手架
版本管理

4. 流行度

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

工具 GitHub Stars PyPI 近半年下载量(万) Forks Open Issues Open PRs
Pipenv 24k+ 6466 1862 260 14
Poetry 30k+ 20502 2236 602 74
Conda 6k+ 97 N/A N/A N/A
Pip-tools 7k+ 7254 608 160 27
Hatch 5k+ 1163 285 239 26
venv Python 内置 N/A N/A N/A N/A

三、结论

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

四、VS pip

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

1. 功能对比

特性 pip poetry
功能和用途 pip 是 Python 的包管理工具,用于安装和管理 Python 包。主要用于从 Python Package Index (PyPI) 下载和安装包,不涉及项目管理。 poetry 是一个全面的 Python 项目管理工具,不仅可以安装和管理包,还可以创建和管理项目、处理依赖关系、发布包等。
配置文件 pip 使用 requirements.txt 文件来列出项目的依赖包。requirements.txt 是一个简单的文本文件,列出所有需要安装的包及其版本。 poetry 使用 pyproject.toml 文件来管理项目的元数据和依赖关系。pyproject.toml 是一个结构化的配置文件,包含项目的详细信息、依赖关系、脚本等。
依赖管理 pip 本身不处理依赖冲突问题,需要开发者手动解决。可以结合 pip-tools 使用,以便更好地管理依赖关系。 poetry 内置依赖解析和锁定机制,可以自动解决依赖冲突问题。会生成一个 poetry.lock 文件,确保项目在不同环境下依赖一致。
虚拟环境管理 pip 本身不管理虚拟环境,但通常与 virtualenvvenv 一起使用。开发者需要手动创建和激活虚拟环境。 poetry 内置虚拟环境管理功能,可以自动创建和管理虚拟环境。使用 poetry 时,虚拟环境的创建和激活是自动处理的。

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 之类的项目及包管理工具更合适的选择。

From:https://www.cnblogs.com/zengzuo613/p/18386370
本文地址: http://www.shuzixingkong.net/article/1549
0评论
提交 加载更多评论
其他文章 MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题
大家好呀,我是summo,最近遇到了一个功能需求,虽然也是CURD,但属于那种比较复杂一点的CURD,话不多说,我们先看一下需求。 需求如下: 有三张表,学生表、课程表、学生课程关联表,关联关系如下图: 要求实现的功能: 支持输入名称模糊查询,可以是学生名称也可以是课程名称,但只有一个输入框; 要求
MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题 MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题 MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题
TimeWheel算法介绍及在应用上的探索
作者:来自 vivo 互联网服务器团队- Li Fan 本文从追溯时间轮算法的出现,介绍了时间轮算法未出现前,基于队列的定时任务实现,以及基于队列的定时任务实现所存在的缺陷。接着我们介绍了时间轮算法的算法思想及其数据结构,详细阐述了三种时间轮模型的数据结构和优劣性。 再次,我们介绍时间轮算法在 Du
TimeWheel算法介绍及在应用上的探索 TimeWheel算法介绍及在应用上的探索 TimeWheel算法介绍及在应用上的探索
Oracle同一台服务器创建多个数据库
有时候我们需要再同一台机器上创建多个数据库服务(不是单纯的数据库实例),每一个数据库可以有单独的服务运行,只是在一个机器环境而已。可以在不同的端口上监听,也可以在相同端口监听 创建多个数据库步骤 安装完Oracle数据库后,会自动安装很多工具,这里我们使用Database Configuration
Oracle同一台服务器创建多个数据库 Oracle同一台服务器创建多个数据库 Oracle同一台服务器创建多个数据库
Mono 现状与未来:从Wine-mono 到.NET 9
Mono 官网主页[1]和 Mono GitHub 页面今日发布公告[2],微软宣布将 Mono 项目移交给 WineHQ 组织,也就是 Linux 兼容 Windows 应用框架 Wine 的开发团队。微软从 2014 年开始向.NET 开源发展,当时微软宣布.NET Core即将开源[3]。然而
Mono 现状与未来:从Wine-mono 到.NET 9
AI驱动的PlantUML:快速生成专业级UML类图和用例图
承接前文关于如何运用 AI 工具生成时序图的内容【1】,今天我们继续探讨 AI 驱动的 PlantUML:高效创建专业的 UML 类图与用例图。 【1】: https://juejin.cn/post/7407637717206728755 【2】: 案例参照开源项目ruoyi-cloud:http
AI驱动的PlantUML:快速生成专业级UML类图和用例图 AI驱动的PlantUML:快速生成专业级UML类图和用例图 AI驱动的PlantUML:快速生成专业级UML类图和用例图
ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享
上一篇我们分析了 Workflow、WorkflowTemplate、template 之间的关系。本篇主要分析如何在 argo-workflow 中使用 S3 存储 artifact 实现步骤之间的文件共享。
ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享 ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享 ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享
架构实战
所谓架构,意即系统架构,广义上它涵盖业务架构、运维架构、组织架构等所有系统构建场景,本文特指一般开发人员主要关注的开发架构。 关于架构的理论有很多,每个人也都有各自的理解,笔者相信很多人在实际运用中也会遇到各种各样的问题和困惑,本文抛开教条,从一个实际项目的演化看何为架构。 项目背景 开始之前,先了
架构实战 架构实战 架构实战
使用 nuxi analyze 命令分析 Nuxt 应用的生产包
title: 使用 nuxi analyze 命令分析 Nuxt 应用的生产包 date: 2024/8/29 updated: 2024/8/29 author: cmdragon excerpt: 使用 nuxi analyze 命令可以帮助你深入了解生产包的结构和大小,从而做出针对性的优化。通
使用 nuxi analyze 命令分析 Nuxt 应用的生产包 使用 nuxi analyze 命令分析 Nuxt 应用的生产包