Python 项目及依赖管理工具技术选型
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)Conda
Conda 在数据科学和机器学习领域非常流行,因为它不仅支持 Python,还支持 R 和其他语言,并且其环境管理功能非常强大。
(4)Pip-tools
Pip-tools 在一些需要精确控制依赖版本的项目中很受欢迎,尤其是那些仍然使用 requirements.txt
的项目。
(5)Hatch
Hatch 是一个相对较新的工具,虽然功能强大,但目前还没有达到 Poetry
或 Conda
的流行度。
(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 本身不管理虚拟环境,但通常与 virtualenv 或 venv 一起使用。开发者需要手动创建和激活虚拟环境。 |
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 之类的项目及包管理工具更合适的选择。
Python 项目及依赖管理工具技术选型的更多相关文章
- Python web 项目的依赖管理工具
Poetry可以帮助你声明.管理和安装Python项目的依赖项,确保你可以在任何地方都拥有正确的堆栈. Poetry支持Python 2.7 和Python 3以上 安装 Poetry提供了一个自定义 ...
- golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的
golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...
- 适合Linux嵌入式项目的代码构建与依赖管理工具——cazel
前言 我们知道,现在有很多流行的优秀代码构建工具,如CMake.jetkins.bazel等.这些不同的构建工具在其应用的领域起到了举足轻重的作用. 但是,如果仔细研究就会发现,在嵌入式领域,构建工具 ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- Composer : php依赖管理工具
原始时代 我记得在当时用php的时候还没有composer,只有个pear,但是不好用呀,还不如直接在互联网上到处复制代码了,更快更不容易出错,当时也没有github这么好的社区工具了 总结如下 代码 ...
- Golang依赖管理工具:glide从入门到精通使用
这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...
- 有用PHP依赖管理工具Composer新手教程
PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理 ...
- composer php依赖管理工具
#composer是什么 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. composer出现之前我们php项目依赖管理大部分都是手动 ...
- supervisor python开发的进程管理工具
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
随机推荐
- Java 自定义注解校验字段唯一性
业务场景 在项目中,某些情景下我们需要验证编码是否重复,账号是否重复,身份证号是否重复等... 那么有没有办法可以解决这类似的重复代码量呢? 我们可以通过自定义注解校验的方式去实现,在实体类上面加上自 ...
- 建立Model
直接使用Sequelize虽然可以,但是存在一些问题. 团队开发时,有人喜欢自己加timestamp: var Pet = sequelize.define('pet', { id: { type: ...
- yb课堂 视频详情页模块开发《三十八》
CourseDetail基础模块开发 CourseDetail模块开发,拆分组件 CourseDetail.vue Header.vue Course.vue Tab.vue Summary.vue ...
- 透视开源生态,OSGraph——GitHub全域数据图谱的智能洞察工具
"透视开源生态,OSGraph--GitHub全域数据图谱的智能洞察工具 OSGraph (Open Source Graph) 是一个开源图谱关系洞察工具,基于GitHub开源数据全域图谱 ...
- java后端解决请求跨域
跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同 ...
- 【nvm、node、npm、nrm】安装配置教程(windows版)
一.nvm 的安装与配置 1.nvm 下载与安装 nvm官方下载地址 (我这里使用当前最新版本 1.1.12) 2.验证 nvm 是否安装成功 # 查看 nvm 版本 nvm -v # 显示远程可安装 ...
- [oeasy]python0078_设置索引颜色_index_color_ansi_控制终端颜色
更多颜色 回忆上次内容 上次 了解了 高亮颜色 91-97 是 高亮 前景色 101-107是 高亮 背景色 颜色种类 在原来基础上 增加了一些 但也非常有限 还想要 更精细的颜色 有可能吗?? 更多 ...
- oeasy教您玩转vim - 44 - # 综合练习
综合练习 回忆上节课内容 上次我们学到了各种的替换模式 r,替换当前光标的字符 R,进入替换模式 ~,改变大小写 这次来个综合练习吧! 我们这次要完成这样一个任务 我们有的时候需要写日志 Syst ...
- 在Django REST framework (DRF) 中,`request.query_params` 和 `request.data` 区别
在Django REST framework (DRF) 中,request.query_params 和 request.data 都是用来获取请求中的数据,但是它们之间有一些关键的区别: requ ...
- Fiddler篡改请求和响应数据
Fiddler标记断点后,我们可以通过篡改请求或响应数据,来模拟客户端请求和服务器响应. 一.打断点的方式 1.1 工具栏设置断点 工具栏勾选断点类型进行断点,路径:Rules->Automat ...