管理 Python 环境和依赖关系的工具 venv、virtualenv、pipenv 、poetry 、 miniforge 和 anaconda 的区别
管理 Python 环境和依赖关系的工具 venv、virtualenv、pipenv 、poetry 、 miniforge 和 anaconda 的区别
venv、virtualenv、pipenv、Poetry、Miniforge 和 Anaconda 都是用于管理 Python 环境和依赖关系的工具,但它们在功能和使用场景上有一些显著的区别。以下是它们的主要区别:
venv
轻量级:
venv是 Python 3.3 及以上版本标准库的一部分,专门用于创建 Python 虚拟环境。- 它非常轻量,只提供基本的虚拟环境管理功能。
环境管理:
venv可以创建独立的 Python 虚拟环境,每个环境有自己的一套 Python 解释器和包。- 使用
venv创建的环境通常较小,因为它们只包含必要的 Python 包。
包管理:
venv本身不提供包管理功能,通常与pip结合使用来安装和管理 Python 包。- 需要手动管理
requirements.txt文件来记录项目的依赖关系。
使用场景:
- 适用于简单的 Python 项目,特别是那些只需要管理 Python 包和虚拟环境的项目。
- 适用于对环境管理要求不高的开发场景。
使用示例:
在命令行中,使用
python3 -m venv myenv创建一个名为myenv的虚拟环境。python3 -m venv myenv # 创建虚拟环境
source myenv/bin/activate # 激活环境 Linux/macOS
myenv\Scripts\activate # 激活环境 Windows
pip install requests # 安装包
virtualenv
独立工具:
virtualenv是一个独立的第三方工具,用于创建 Python 虚拟环境。- 它比
venv更早出现,功能也更丰富一些。适用于 Python 2 和 Python 3。
环境管理:
virtualenv可以创建独立的 Python 虚拟环境,每个环境有自己的一套 Python 解释器和包。- 提供了一些高级选项,如指定 Python 解释器版本、复制系统站点包等。
包管理:
virtualenv本身不提供包管理功能,通常与pip结合使用来安装和管理 Python 包。- 需要手动管理
requirements.txt文件来记录项目的依赖关系。
使用场景:
- 适用于需要更多自定义选项的 Python 项目。
- 适用于需要兼容早期 Python 版本的项目。
使用示例:
安装并创建虚拟环境:
pip install virtualenv # 安装 virtualenv
virtualenv myenv # 创建虚拟环境
source myenv/bin/activate # 激活环境 Linux/macOS
myenv\Scripts\activate # 激活环境 Windows
pip install requests # 安装包
pipenv
集成工具:
pipenv是一个集成了virtualenv和pip的工具,用于管理虚拟环境和依赖关系。- 它使用
Pipfile和Pipfile.lock文件来管理项目的依赖关系。
环境管理:
pipenv会自动为每个项目创建和管理一个独立的虚拟环境,避免不同项目之间的依赖冲突。- 可以轻松地激活和停用虚拟环境。
包管理:
pipenv自动处理依赖关系的解析和安装,确保项目的所有依赖都能正确安装。- 生成和管理
Pipfile.lock文件,确保在不同环境中安装相同的依赖版本,支持语义化版本管理。
使用场景:
- 适用于需要管理虚拟环境和依赖关系的中等复杂度的 Python 项目。
- 适用于需要自动处理依赖关系解析和安装的项目。
使用示例:
需要单独安装
pipenv,通常通过pip安装:pip install pipenv # 安装 pipenv
pipenv install requests # 安装包
pipenv shell # 激活虚拟环境
Poetry
多功能:
Poetry是一个现代的 Python 包管理和环境管理工具,不仅管理虚拟环境,还管理项目的依赖关系。- 它使用
pyproject.toml文件来管理项目的依赖关系,这个文件是 PEP 518 推荐的标准配置文件。
环境管理:
Poetry会自动为每个项目创建和管理一个独立的虚拟环境,避免不同项目之间的依赖冲突。- 可以轻松地激活和停用虚拟环境。
包管理:
Poetry自动处理依赖关系的解析和安装,确保项目的所有依赖都能正确安装。- 生成和管理
lock文件(poetry.lock),确保在不同环境中安装相同的依赖版本。
包发布:
Poetry提供了简便的命令来打包和发布 Python 包到 PyPI 或其他私有仓库。- 自动生成
setup.py和MANIFEST.in文件,简化发布流程。
版本管理:
Poetry支持语义化版本管理,可以方便地管理项目的版本号。- 提供命令来增加版本号并生成相应的变更日志。
使用场景:
- 适用于需要精细依赖管理和虚拟环境管理的复杂 Python 项目。
- 适用于需要自动化和简化包发布流程的项目。
- 适用于需要跨平台支持的项目。
使用示例:
Poetry提供了丰富的命令行工具,可以轻松地管理依赖项、构建和发布项目。pip install poetry
poetry new my_project
cd my_project
poetry add requests
poetry install # 创建虚拟环境并安装依赖
Miniforge
Anaconda 替代品:
Miniforge是一个轻量级的 Anaconda 替代品,基于 Conda 包管理器。- 它提供了与 Anaconda 类似的功能,但体积更小,安装更快。
- 由
conda-forge社区维护。
环境管理:
Miniforge使用 Conda 来管理虚拟环境,可以创建独立的环境,每个环境有自己的一套 Python 解释器和包。- 提供了丰富的环境管理功能,如环境导出和导入。
包管理:
Miniforge使用 Conda 来管理包,Conda 是一个跨平台的包管理系统,支持多种语言和工具。- 可以安装来自 Anaconda 仓库和其他自定义仓库的包。
使用场景:
- 适用于需要管理复杂依赖关系和多语言环境的项目。
- 适用于需要高性能计算和科学计算的项目。
- 适用于需要跨平台支持的项目。
使用示例:
# 安装 Miniforge - Linux
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
bash Miniforge3-Linux-x86_64.sh # 创建环境
conda create --name my_env python=3.13
conda activate my_env # 安装包
conda install requests
AnaConda
综合包管理器:
AnaConda是一个开源的包管理和环境管理系统,支持多种语言和工具,而不仅仅是 Python。- 它提供了强大的依赖解析和包管理功能。
环境管理:
AnaConda可以创建独立的环境,每个环境有自己的一套 Python 解释器和包。- 提供了丰富的环境管理功能,如环境导出和导入。
- 使用
environment.yml文件来定义环境和依赖。
包管理:
AnaConda可以安装来自 Anaconda 仓库和其他自定义仓库的包。- 支持二进制包,安装速度快,适合大型科学计算和数据科学项目。
使用场景:
- 适用于需要管理复杂依赖关系和多语言环境的项目。
- 适用于需要高性能计算和科学计算的项目。
- 适用于需要跨平台支持的项目。
- 适用于需要综合的包管理和环境管理功能的项目。
使用示例:
# 安装 Anaconda 或 Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh # 创建环境
conda create --name my_env python=3.13
conda activate my_env # 安装包
conda install requests
总结
venv:
- 适用于简单的 Python 项目。
- 只提供基本的虚拟环境管理功能。
- 需要手动管理依赖关系。
- 轻量级,易于使用。
virtualenv:
- 适用于需要更多自定义选项的 Python 项目。
- 提供了一些高级选项,如指定 Python 解释器版本。
- 需要手动管理依赖关系。
- 适用于需要兼容早期 Python 版本的项目。
pipenv:
- 适用于需要管理虚拟环境和依赖关系的中等复杂度的 Python 项目。
- 自动处理依赖关系解析和安装。
- 提供了
Pipfile和Pipfile.lock文件来管理依赖关系。
Poetry:
- 适用于复杂的 Python 项目。
- 提供全面的包管理和环境管理功能。
- 自动处理依赖关系和版本管理。
- 提供简便的包发布流程。
- 功能强大,但相对复杂一些。
Miniforge:
- 适用于需要管理复杂依赖关系和多语言环境的项目。
- 适用于需要高性能计算和科学计算的项目。
- 适用于需要跨平台支持的项目。
- 轻量级的 Anaconda 替代品。
Anaconda:
- 适用于需要管理复杂依赖关系和多语言环境的项目。
- 适用于需要高性能计算和科学计算的项目。
- 适用于需要跨平台支持的项目。
- 综合性强,功能全面。
使用场景
使用 venv:
- 简单的 Python 项目。
- 需要轻量级虚拟环境管理的项目。
- 只需要管理 Python 包的项目。
使用 virtualenv:
- 需要更多自定义选项的 Python 项目。
- 需要兼容早期 Python 版本的项目。
使用 pipenv:
- 中等复杂度的 Python 项目。
- 需要自动处理依赖关系解析和安装的项目。
使用 Poetry:
- 复杂的 Python 项目。
- 需要精细依赖管理和虚拟环境管理的项目。
- 需要自动化和简化包发布流程的项目。
使用 Miniforge:
- 需要管理复杂依赖关系和多语言环境的项目。
- 需要高性能计算和科学计算的项目。
- 需要跨平台支持的项目。
- 希望使用轻量级的 Anaconda 替代品。
使用 Anaconda:
- 需要管理复杂依赖关系和多语言环境的项目。
- 需要高性能计算和科学计算的项目。
- 需要跨平台支持的项目。
- 需要综合的包管理和环境管理功能。
管理 Python 环境和依赖关系的工具 venv、virtualenv、pipenv 、poetry 、 miniforge 和 anaconda 的区别的更多相关文章
- 写文章 使用conda管理python环境
使用conda管理python环境
- Prism 文档 第三章 管理组件之间的依赖关系
第3章:管理组件之间的依赖关系 基于Prism库的复合应用程 ...
- composer(管理依赖关系的工具) 及配置信息
Composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 配置文件 ...
- 推荐:使用 Anaconda 工具搭建并管理 Python 环境
https://www.anaconda.com/distribution/#download-section 官网下载地址 https://mirror.tuna.tsinghua.edu.cn/ ...
- virtualenv 管理python 环境
virualenvvirtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升级不 ...
- 【转】利用virtualenv管理Python环境
virtualenv virtualenv用于创建独立的Python环境,多个python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升 ...
- 使用conda管理python环境和包
操作系统:CentOS7使用virtualenv管理python虚拟环境virtualenv是一款轻量级第三方虚拟环境管理工具,不像Anaconda大小达上百M,virtualenv大小只有10M左右 ...
- anconda使用---使用conda管理python环境
一.动机 最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局锁真的很烦. 身为懒癌患者,必然使用全功能的anacond ...
- Prism 4 文档 ---第3章 管理组件间的依赖关系
基于Prism类库的应用程序可能是由多个松耦合的类型和服务组成的复杂应用程序,他们需要根据用户的动作发出内容和接收通知进行互动,由于他们是松耦合的,他们需要一种方式来互动和交流来传递业务功能的需求. ...
- 使用conda管理python环境
一.动机 最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局锁真的很烦. 身为懒癌患者,必然使用全功能的anacond ...
随机推荐
- 关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路
关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路 WrongFirst: 我准备了一个正常类BG和一个有错误的类HelloWor ...
- Mac M1 安装Homebrew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- ERROR: Could not determine java version from 'JavaVersion.VERSION_1_8'.
写法原为: compileOptions { sourceCompatibility 'JavaVersion.VERSION_1_8' targetCompatibility 'JavaVersio ...
- 【YashanDB知识库】v$instance视图中实例角色含义不明确
[标题]v$instance视图中实例角色含义不明确 [问题分类]文档问题 [关键词]YashanDB, v$instance, 实例角色 [问题描述]v$instance视图中实例角色(如MASTE ...
- DB\redis\zookeeper分布式锁设计
redis 参考目录: 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现 https://www.cnblogs.com/yizhiamumu/p/16556153.html 生产级Re ...
- 前端解决Long类型精度丢失的问题
问题 数据库数据: 前端得到的数据: 出现了Long类型的数据出现精度丢失问题! 原因 JS中Long最大值:9007199254740992 JAVA中Long最大值:922337203685477 ...
- JS处理html的编码(encode)与解码(decode)
一.用浏览器内部转换器实现转换 代码: var HtmlUtil = { // 1.用浏览器内部转换器实现html编码 htmlEncode: function(html) { // 创建一个元素容器 ...
- DNN、CNN、RNN的区别
参考1:CNN.RNN.DNN区别 参考2:一文读懂 CNN.DNN.RNN 内部网络结构区别 一张图解释所有: 感知机(输入层.输出层.一个隐藏层)-->不能解决复杂的函数-->神经网络 ...
- CSS – display, visibility, opacity, transparent 的区别
前言 要让一个元素"消失", 有 3 种做法. 它们有一点点的不同. 在实战时要清楚什么时候用什么哦. 例子说明 <div class="abc"> ...
- Asp.net core 学习笔记之 globalization & localization 复习篇
更新: 2022-03-22 修订版: ASP.NET Core – Globalization & Localization 更新: 2021-06-15 之前有说过, 我没有使用默认的 f ...