管理 Python 环境和依赖关系的工具 venv、virtualenv、pipenv 、poetry 、 miniforge 和 anaconda 的区别

venvvirtualenvpipenvPoetryMiniforgeAnaconda 都是用于管理 Python 环境和依赖关系的工具,但它们在功能和使用场景上有一些显著的区别。以下是它们的主要区别:

venv

  1. 轻量级

    • venv 是 Python 3.3 及以上版本标准库的一部分,专门用于创建 Python 虚拟环境。
    • 它非常轻量,只提供基本的虚拟环境管理功能。
  2. 环境管理

    • venv 可以创建独立的 Python 虚拟环境,每个环境有自己的一套 Python 解释器和包。
    • 使用 venv 创建的环境通常较小,因为它们只包含必要的 Python 包。
  3. 包管理

    • venv 本身不提供包管理功能,通常与 pip 结合使用来安装和管理 Python 包。
    • 需要手动管理 requirements.txt 文件来记录项目的依赖关系。
  4. 使用场景

    • 适用于简单的 Python 项目,特别是那些只需要管理 Python 包和虚拟环境的项目。
    • 适用于对环境管理要求不高的开发场景。
  5. 使用示例

    • 在命令行中,使用 python3 -m venv myenv 创建一个名为 myenv 的虚拟环境。

      python3 -m venv myenv      # 创建虚拟环境
      source myenv/bin/activate # 激活环境 Linux/macOS
      myenv\Scripts\activate # 激活环境 Windows
      pip install requests # 安装包

virtualenv

  1. 独立工具

    • virtualenv 是一个独立的第三方工具,用于创建 Python 虚拟环境。
    • 它比 venv 更早出现,功能也更丰富一些。适用于 Python 2 和 Python 3。
  2. 环境管理

    • virtualenv 可以创建独立的 Python 虚拟环境,每个环境有自己的一套 Python 解释器和包。
    • 提供了一些高级选项,如指定 Python 解释器版本、复制系统站点包等。
  3. 包管理

    • virtualenv 本身不提供包管理功能,通常与 pip 结合使用来安装和管理 Python 包。
    • 需要手动管理 requirements.txt 文件来记录项目的依赖关系。
  4. 使用场景

    • 适用于需要更多自定义选项的 Python 项目。
    • 适用于需要兼容早期 Python 版本的项目。
  5. 使用示例

    • 安装并创建虚拟环境:

      pip install virtualenv     # 安装 virtualenv
      virtualenv myenv # 创建虚拟环境
      source myenv/bin/activate # 激活环境 Linux/macOS
      myenv\Scripts\activate # 激活环境 Windows
      pip install requests # 安装包

pipenv

  1. 集成工具

    • pipenv 是一个集成了 virtualenvpip 的工具,用于管理虚拟环境和依赖关系。
    • 它使用 PipfilePipfile.lock 文件来管理项目的依赖关系。
  2. 环境管理

    • pipenv 会自动为每个项目创建和管理一个独立的虚拟环境,避免不同项目之间的依赖冲突。
    • 可以轻松地激活和停用虚拟环境。
  3. 包管理

    • pipenv 自动处理依赖关系的解析和安装,确保项目的所有依赖都能正确安装。
    • 生成和管理 Pipfile.lock 文件,确保在不同环境中安装相同的依赖版本,支持语义化版本管理。
  4. 使用场景

    • 适用于需要管理虚拟环境和依赖关系的中等复杂度的 Python 项目。
    • 适用于需要自动处理依赖关系解析和安装的项目。
  5. 使用示例

    • 需要单独安装 pipenv,通常通过 pip 安装:

      pip install pipenv    # 安装 pipenv
      pipenv install requests # 安装包
      pipenv shell # 激活虚拟环境

Poetry

  1. 多功能

    • Poetry 是一个现代的 Python 包管理和环境管理工具,不仅管理虚拟环境,还管理项目的依赖关系。
    • 它使用 pyproject.toml 文件来管理项目的依赖关系,这个文件是 PEP 518 推荐的标准配置文件。
  2. 环境管理

    • Poetry 会自动为每个项目创建和管理一个独立的虚拟环境,避免不同项目之间的依赖冲突。
    • 可以轻松地激活和停用虚拟环境。
  3. 包管理

    • Poetry 自动处理依赖关系的解析和安装,确保项目的所有依赖都能正确安装。
    • 生成和管理 lock 文件(poetry.lock),确保在不同环境中安装相同的依赖版本。
  4. 包发布

    • Poetry 提供了简便的命令来打包和发布 Python 包到 PyPI 或其他私有仓库。
    • 自动生成 setup.pyMANIFEST.in 文件,简化发布流程。
  5. 版本管理

    • Poetry 支持语义化版本管理,可以方便地管理项目的版本号。
    • 提供命令来增加版本号并生成相应的变更日志。
  6. 使用场景

    • 适用于需要精细依赖管理和虚拟环境管理的复杂 Python 项目。
    • 适用于需要自动化和简化包发布流程的项目。
    • 适用于需要跨平台支持的项目。
  7. 使用示例

    • Poetry 提供了丰富的命令行工具,可以轻松地管理依赖项、构建和发布项目。
      pip install poetry
      poetry new my_project
      cd my_project
      poetry add requests
      poetry install # 创建虚拟环境并安装依赖

Miniforge

  1. Anaconda 替代品

    • Miniforge 是一个轻量级的 Anaconda 替代品,基于 Conda 包管理器。
    • 它提供了与 Anaconda 类似的功能,但体积更小,安装更快。
    • conda-forge 社区维护。
  2. 环境管理

    • Miniforge 使用 Conda 来管理虚拟环境,可以创建独立的环境,每个环境有自己的一套 Python 解释器和包。
    • 提供了丰富的环境管理功能,如环境导出和导入。
  3. 包管理

    • Miniforge 使用 Conda 来管理包,Conda 是一个跨平台的包管理系统,支持多种语言和工具。
    • 可以安装来自 Anaconda 仓库和其他自定义仓库的包。
  4. 使用场景

    • 适用于需要管理复杂依赖关系和多语言环境的项目。
    • 适用于需要高性能计算和科学计算的项目。
    • 适用于需要跨平台支持的项目。
  5. 使用示例

    # 安装 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

  1. 综合包管理器

    • AnaConda 是一个开源的包管理和环境管理系统,支持多种语言和工具,而不仅仅是 Python。
    • 它提供了强大的依赖解析和包管理功能。
  2. 环境管理

    • AnaConda 可以创建独立的环境,每个环境有自己的一套 Python 解释器和包。
    • 提供了丰富的环境管理功能,如环境导出和导入。
    • 使用 environment.yml 文件来定义环境和依赖。
  3. 包管理

    • AnaConda 可以安装来自 Anaconda 仓库和其他自定义仓库的包。
    • 支持二进制包,安装速度快,适合大型科学计算和数据科学项目。
  4. 使用场景

    • 适用于需要管理复杂依赖关系和多语言环境的项目。
    • 适用于需要高性能计算和科学计算的项目。
    • 适用于需要跨平台支持的项目。
    • 适用于需要综合的包管理和环境管理功能的项目。
  5. 使用示例

    # 安装 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 项目。
    • 自动处理依赖关系解析和安装。
    • 提供了 PipfilePipfile.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 的区别的更多相关文章

  1. 写文章 使用conda管理python环境

    使用conda管理python环境

  2. Prism 文档 第三章 管理组件之间的依赖关系

                                                                          第3章:管理组件之间的依赖关系 基于Prism库的复合应用程 ...

  3. composer(管理依赖关系的工具) 及配置信息

    Composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 配置文件 ...

  4. 推荐:使用 Anaconda 工具搭建并管理 Python 环境

    https://www.anaconda.com/distribution/#download-section  官网下载地址 https://mirror.tuna.tsinghua.edu.cn/ ...

  5. virtualenv 管理python 环境

    virualenvvirtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升级不 ...

  6. 【转】利用virtualenv管理Python环境

    virtualenv virtualenv用于创建独立的Python环境,多个python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升 ...

  7. 使用conda管理python环境和包

    操作系统:CentOS7使用virtualenv管理python虚拟环境virtualenv是一款轻量级第三方虚拟环境管理工具,不像Anaconda大小达上百M,virtualenv大小只有10M左右 ...

  8. anconda使用---使用conda管理python环境

    一.动机 最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局锁真的很烦. 身为懒癌患者,必然使用全功能的anacond ...

  9. Prism 4 文档 ---第3章 管理组件间的依赖关系

     基于Prism类库的应用程序可能是由多个松耦合的类型和服务组成的复杂应用程序,他们需要根据用户的动作发出内容和接收通知进行互动,由于他们是松耦合的,他们需要一种方式来互动和交流来传递业务功能的需求. ...

  10. 使用conda管理python环境

    一.动机 最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局锁真的很烦. 身为懒癌患者,必然使用全功能的anacond ...

随机推荐

  1. C语言中的短路现象

    短路现象1 比如有以下表达式 a && b && c 只有a为真(非0)才需要判断b的值: 只有a和b都为真,才需要判断c的值. 举例 求最终a.b.c.d的值. ma ...

  2. 代码随想录Day22

    77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], [ ...

  3. ZeroTier 内网穿透

    之前使用 FRP 进行内网穿透,缺点是需要公网 IP,而没有公网 IP 的我只好租了一台云服务器来作为 FRP Server.花钱不说,公网这台云服务器的带宽还很小,导致内网穿透体验并不怎么样.Zer ...

  4. 【YashanDB数据库】yasboot查询数据库状态时显示数据库状态为off

    [问题现象] yasboot cluster status -c yashandb 显示数据库状态为off与数据库实际的状态不符,如下图 [问题分类]yasboot.yasdb使用问题 [关键字]ya ...

  5. SQL无法解决排序规则 Chinese_PRC_CI_AS 和 Latin1_General_CI_AS 的冲突

    最近在执行一些跨库关联查询语句的时候提示了 "Cannot resolve the collatior conflict between "Chinese_PRC_Ci As&qu ...

  6. 这10种分布式ID,太绝了!

    前言 分布式ID,在我们日常的开发中,其实使用的挺多的. 有很多业务场景在用,比如: 分布式链路系统的trace_id 单表中的主键 Redis中分布式锁的key 分库分表后表的id 今天跟大家一起聊 ...

  7. 心得小结,关于注重加强MCU下调试能力的意识

    这两个月没有怎么更新博文,最近换工作了,根据新工作安排,大半年内都做MCU开发(就不要叫单片机了,太老土了). 入职新工作了,需重构拳头产品的软件,所以每天加班加点. 单片机与linux应用开发,开发 ...

  8. BOOST 定时器 stop探究

    Asio是一个建立在Boost所提供的相关组件之上的异步的网络库,可以运行在Win/Linux/Unix等各种平台之上. 不过随着C++11的发布,其对Boost的依赖也越来越少,作者又做了一个不依赖 ...

  9. Windows11忘记开机密码重置

    在锁屏页面按着shift键重启,找到命令行输入一下两行代码 copy c:\windows\system\system32\utilman.exe c:\windows\system32\utilma ...

  10. linux java 初始环境配置

    linux初始环境配置 1.设置IP 查看虚拟机ip地址:ip addr 修改ip地址 Vi /etc/sysconfig/network~scrips/ifcfg-ens33(不一定是33 动态的) ...