python-venv-conda

引言

什么是虚拟环境?

虚拟环境是一个 Python 环境,其中安装的 Python 解释器、库和脚本与安装在其他虚拟环境中的那些是隔离的,而且(默认情况下)安装在系统 Python 中的任何库(即作为操作系统的一部分安装的库)也是隔离的。

为什么需要虚拟环境?

这是由于 pip 的特性决定的,同一个环境下,仅允许安装每个包的一个版本。假设,这里有三个包,分别为:A、B 和 C。A 包依赖于 B 包的 v1.0 版本,而 C 包依赖于 B 包的 v2.0 版本。如果我安装了 v1.0 的 B 包,那么 C 包就无法使用;如果安装了 v2.0 的 B 包,那么 A 包就无法使用。因此,在同一个环境下,由于只能安装一个版本的 B 包,导致 A 包和 C 包无法同时使用。

因此,我们需要创建多个 Python 的虚拟环境来解决上述问题。在环境 1 下安装 v1.0 的 B 包,然后就能使用 A 包,在环境 2 下安装 v2.0 的 B 包,就能使用 C 包。也就说,不同虚拟环境下的包是互不影响的,避免了包冲突问题。

此外,我们推荐每进行一个新的项目开发,就创建一个仅适用于该项目的虚拟 Python 环境。这样有助于包管理,同时还能非常清晰地列出项目开发用到的所有包,生成一键安装清单,方便后期的部署或复现。

venvconda的区别

be like this

image-20240906125628715

venv

venv 创建的虚拟环境是 Python 自带的一种轻量级虚拟环境管理工具,用于隔离项目之间的依赖。每个虚拟环境都有自己独立的 Python 解释器和库,从而避免在同一系统中不同项目之间的依赖冲突。venv 是 Python 3.3 之后内置的工具,它的功能相对简单,但足以应对大多数纯 Python 项目的需求。

相当于创建了个独立的 site-packages,只能用本地有的python解释器

目录结构

.venv
    ├─pyvenv.cfg
    ├─Include
    ├─Lib
    │  └─site-packages
    │      ├─pip
    │      ├─pip-20.2.3.dist-info
    │      ├─pkg_resources
    │      ├─setuptools-49.2.1.dist-info
    │      ├─easy_install.py
    │      └─__pycache__
    └─Scripts
    │  └─activate
    │  └─activate.bat
    │  └─Activate.ps1
    │  └─deactivate.bat
    │  └─easy_install-3.9.exe
    │  └─easy_install.exe
    │  └─pip.exe
    │  └─pip3.9.exe
    │  └─pip3.exe
    │  └─python.exe
    │  └─pythonw.exe

pyvenv.cfg 是一个配置文件,包含三个参数:

  • home:指向运行命令的 Python 安装目录;
  • include-system-site-packages:是否使用系统 Python 环境中安装的包。默认是 false,即不使用;
  • version:Python 版本号。

1. 独立的环境

venv 创建的虚拟环境与系统 Python 环境隔离。虚拟环境中包含自己专属的 Python 解释器以及安装的依赖库。每个虚拟环境可以拥有不同的 Python 版本或依赖库,不会影响系统全局的 Python 环境。

2. 轻量级

与其他包管理工具(如 conda)相比,venv 非常轻量。它只处理 Python 环境和包,不涉及复杂的依赖管理或多语言支持。这使得它适用于不需要管理系统库或其他语言依赖的项目。

3. Python 包管理

venv 的虚拟环境依赖于 pip 来管理 Python 包。所有安装的包都存放在虚拟环境的特定目录中,确保不同项目可以使用不同版本的库而不会发生冲突。

4. 简单易用

venv 使用起来非常简单,几条命令就能完成虚拟环境的创建和管理。它特别适合小型项目或不依赖复杂包管理的场景。

使用 venv 创建虚拟环境的基本步骤:

  1. 创建虚拟环境

    python -m venv myenv
    

    这将会在当前目录下创建一个名为 myenv 的虚拟环境文件夹,里面包含独立的 Python 解释器和 pip

  2. 激活虚拟环境

    • 在 Windows 上:

      myenv\Scripts\activate
      
    • 在 macOS 和 Linux 上:

      source myenv/bin/activate
      

    激活后,命令行提示符通常会显示虚拟环境的名称,表明你正在使用该环境。

  3. 安装依赖包: 使用 pip 在虚拟环境中安装依赖包:

    pip install numpy pandas
    
  4. 查看已安装的包: 可以通过 pip list 查看当前虚拟环境中安装的所有包:

    pip list
    
  5. 退出虚拟环境: 当你不再需要使用虚拟环境时,可以通过以下命令退出虚拟环境:

    deactivate
    
  6. 删除虚拟环境: 直接删除虚拟环境的文件夹即可:

    rm -rf myenv
    

5. 限制

venv 只管理 Python 解释器和相关包的虚拟环境,无法处理系统级的依赖库。

conda 相比,venv 不能处理非 Python 语言的库,也不支持安装和管理系统依赖或二进制库。

总结

venv 创建的虚拟环境是一种轻量、简单的工具,专注于 Python 项目之间的隔离。它的主要优势在于使用简单,适合那些只需要管理 Python 包和依赖的小型项目。如果你的项目不涉及多语言或复杂的依赖库,那么使用 venv 是一个快速有效的选择。

conda

conda 创建的虚拟环境是一种隔离的运行环境,主要用于项目中不同版本的库或依赖管理,确保项目在不受其他项目影响的情况下进行开发和运行。具体来说,conda 创建的虚拟环境具有以下特点:

相当于创建了个独立的 python环境,可以用不同版本的python解释器

1. 独立的环境

conda 创建的每个虚拟环境都是独立的,包含自己专属的 Python 版本、依赖包、二进制库等。这种隔离确保了每个项目可以使用不同版本的库或工具,而不会影响系统或其他项目的环境。

2. 包管理

conda 创建的虚拟环境不仅可以管理 Python 包,还能管理 C、C++ 等其他语言的包以及二进制库。例如,你可以在同一个 conda 虚拟环境中安装 NumPy、Pandas 等 Python 库,同时也能安装 OpenCV 或其他依赖系统库的非 Python 包。

3. 跨平台支持

conda 的虚拟环境在不同平台(Windows、Linux、macOS)上表现一致,支持多编译器和多平台的包管理,特别适合跨平台开发需求。

4. 灵活的 Python 版本管理

conda 虚拟环境支持多个 Python 版本的并存。你可以为不同的项目创建使用不同版本 Python 的虚拟环境,比如一个项目使用 Python 3.8,而另一个项目则使用 Python 3.10,而不需要修改系统 Python 版本。

5. 环境变量和配置

conda 虚拟环境不仅管理包和依赖,还可以管理环境变量。某些包或工具依赖特定的环境变量,conda 可以为每个虚拟环境设置这些变量,并确保它们不影响其他环境。

6. 可移植性

conda 创建的虚拟环境可以打包并在不同机器上复现。通过导出环境配置文件(conda env export),可以在另一台机器上快速安装并构建相同的开发环境。

使用 conda 创建虚拟环境的基本步骤:

  1. 创建虚拟环境

    conda create -n myenv python=3.8
    

    这里 myenv 是虚拟环境的名称,python=3.8 指定了使用 Python 3.8 版本。

  2. 激活虚拟环境

    conda activate myenv
    
  3. 安装包

    conda install numpy pandas
    

    可以通过 conda install 安装所需的库,也可以使用 pip 安装一些没有在 conda 仓库中的包。

  4. 列出虚拟环境

    conda env list
    

    可以查看所有创建的虚拟环境。

  5. 删除虚拟环境

    conda remove --name myenv --all
    

    删除虚拟环境时,使用 --all 参数清除该环境中的所有内容。

总结

conda 创建的虚拟环境是一种强大且灵活的工具,能够管理 Python 版本、库、依赖项以及系统级包,提供跨平台的支持。它对于复杂项目和需要依赖管理的多语言开发环境非常有用,确保不同项目之间的依赖不会发生冲突。

poetry

github