虚拟环境

一、什么是虚拟环境 virtual environment

它是一个虚拟化,从电脑独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互相隔离,互不影响。

二、为什么需要虚拟环境

想象下面场景

在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。如一下场景:

场景1:项目A需要某个框架1.0版本,项目B需要这个库的2.0版本。如果没有安装虚拟环境,那么当你使用这两个项目时,你就需要 来回 的卸载安装了,这样很容易就给你的项目带来莫名的错误;

场景2:公司之前的项目需要python2.7环境下运行,而你接手的项目需要在python3环境中运行,想想就应该知道,如果不使用虚拟环境,这这两个项目可能无法同时使用,使用python3则公司之前的项目可能无法运行,反正则新项目运行有麻烦。而如果虚拟环境可以分别为这两个项目配置不同的运行环境,这样两个项目就可以同时运行。

深度学习中使用虚拟环境有几个重要原因:

  • 隔离环境:虚拟环境允许你在不同的项目之间隔离依赖和库。这对于深度学习项目尤其重要,因为不同项目可能需要不同版本的库或依赖项。通过创建虚拟环境,你可以确保每个项目都有独立的环境,避免了版本冲突和不必要的干扰。

  • 版本控制:深度学习框架和库经常更新,而且不同版本之间可能存在不兼容性。使用虚拟环境可以确保你的项目在特定版本的库上运行,从而避免了由于库更新而导致的问题。
    版本的升级,意味着内部实现原理的改变,而这意味兼容性的问题。最直观的例子就是,假设原先的一个方法,它的语法完全变了,而这时候如果你集成了多个第三方库,而每个第三方库只支持特定版本及以上的Python特性,兼容性的复杂程度将成几何形成长。这还只是一个项目,当多个项目引用的虽然是同一个第三方库,可是它们依赖的是不同的版本,怎么办?虚拟环境就是创建了一个专属空间,当前项目的所有依赖,都从这个专属空间里引用,即 专属的第三方库,专属的指定版本。专属空间,才是虚拟环境的意义所在。

  • 依赖管理:虚拟环境允许你明确指定项目所需的依赖项。这样,你可以轻松地安装、升级或删除特定的库,而不会影响其他项目。

三、Anaconda创建、激活、退出、删除虚拟环境

在Anaconda中conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。所以对虚拟环境进行创建、删除等操作需要使用conda命令。

创建虚拟环境

使用 conda create -n your_env_name python=X.X(2.7、3.6等),anaconda 命令创建python版本为X.X、名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。 指定python版本为2.7,注意至少需要指定python版本或者要安装的包, 在不指定python版本时,自动安装最新python版本。

conda create -n env_name python=2.7

同时安装必要的包

conda create -n env_name numpy matplotlib python=2.7

激活虚拟环境

使用如下命令即可激活创建的虚拟环境

Linux: source activate your_env_name(虚拟环境名称)

Windows: activate your_env_name(虚拟环境名称)

此时使用python --version可以检查当前python版本是否为想要的(即虚拟环境的python版本)。

退出虚拟环境

使用如下命令即可退出创建的虚拟环境

Linux: source deactivate your_env_name(虚拟环境名称)

Windows: deactivate env_name,也可以使用activate root切回root环境

删除虚拟环境

删除环境:

使用命令conda remove -n your_env_name(虚拟环境名称) --all, 即可删除。

删除虚拟环境中的包:

使用命令conda remove --name $your_env_name $package_name(包名)即可。

分享环境

如果你想把你当前的环境配置与别人分享,这样ta可以快速建立一个与你一模一样的环境(同一个版本的python及各种包)来共同开发/进行新的实验。一个分享环境的快速方法就是给ta一个你的环境的.yml文件。首先通过activate target_env要分享的环境target_env,然后输入下面的命令

conda env export > environment.yml

会在当前工作目录下生成一个environment.yml文件,小伙伴拿到environment.yml文件后,将该文件放在工作目录下,可以通过以下命令

conda env create -f environment.yml

从该文件创建环境,.yml是这个样子的

conda常用命令

conda list:查看安装了哪些包。

conda install package_name(包名):安装包

比如:
conda install --channel https://conda.anaconda.org/menpo opencv3 :安装opencv

conda install scikit-learn:安装sklearn

conda install tensorflow-gpu:安装GPU版本的tensorflow

conda install keras:安装keras

conda env listconda info -e:查看当前存在哪些虚拟环境

conda update conda:检查更新当前conda

conda系列工具的区别

anaconda、miniconda和conda

1. Anaconda

Anaconda是一个包含180+的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。

2. conda

conda 是Anaconda 中的一个组件,用于安装和管理软件包。
conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换

  • 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。

  • 适用平台:Windows, macOS, Linux

  • 用途:
    快速安装、运行和升级包及其依赖项。
    在计算机中便捷地创建、保存、加载和切换环境。

如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。——Conda官方网站

  • conda为Python项目而创造,但可适用于上述的多种语言。

  • conda包和环境管理器包含于Anaconda的所有版本当中。

3. Miniconda

Miniconda 作为 Anaconda 的轻量版,Miniconda 和 Anaconda 之间的主要区别就在于Anaconda 包含了许多科学计算和数据分析用的包,而 Miniconda 只包含了最基本的包和工具如果你只需要安装最基本的包和工具,并且希望节省空间,那么 Miniconda 可能是一个不错的选择。如果你需要许多科学计算和数据分析用的包,那么 Anaconda 可能是一个更好的选择。

conda、pip、virtualenv的区别

1. pip

pip是用于安装和管理软件包的包管理器。

  • pip编写语言:Python。

  • Python中默认安装的版本:
    ① Python 2.7.9及后续版本:默认安装,命令为 pip
    ② Python 3.4及后续版本:默认安装,命令为 pip3

  • pip名称的由来:pip采用的是递归缩写进行命名的。其名字被普遍认为来源于2处:
    Pip installs Packages(“pip安装包”)
    Pip installs Python(“pip安装Python”)

2. virtualenv

virtualenv是用于创建一个独立的Python环境的工具。

  • 解决问题:
    当一个程序需要使用Python 2.7版本,而另一个程序需要使用Python 3.6版本,如何同时使用这两个程序?如果将所有程序都安装在系统下的默认路径,如:/usr/lib/python2.7/site-packages,当不小心升级了本不该升级的程序时,将会对其他的程序造成影响。
    如果想要安装程序并在程序运行时对其库或库的版本进行修改,都会导致程序的中断。
    在共享主机时,无法在全局 site-packages 目录中安装包。

  • virtualenv将会为它自己的安装目录创建一个环境,这并不与其他virtualenv环境共享库;同时也可以选择性地不连接已安装的全局库。

3. pip 与 conda 比较

(1) 依赖项检查

  • pip:
    ① 不一定会展示所需其他依赖包。
    ② 安装包时或许会直接忽略依赖项而安装,仅在结果中提示错误。

  • conda:
    ① 列出所需其他依赖包。
    ② 安装包时自动安装其依赖项。
    ③ 可以便捷地在包的不同版本中自由切换。

(2) 环境管理

  • pip:维护多个环境难度较大。

  • conda:比较方便地在不同环境之间进行切换,环境管理较为简单。

(3) 对系统自带Python的影响

  • pip:在系统自带Python中包的更新/回退版本/卸载将影响其他程序。

  • conda:不会影响系统自带Python。

(4) 适用语言

  • pip:仅适用于Python。

  • conda:适用于Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。

4. conda与pip、virtualenv的关系

conda结合了pip和virtualenv的功能。

anaconda和docker

Anaconda和Docker是两个不同的工具,但在某些方面解决了类似的问题。

Anaconda:

  • 用途:Anaconda是一个虚拟环境管理工具和软件包管理工具。它主要用于创建和管理Python环境,使得在不同版本的Python下开发应用程序成为可能。

  • 优点:Anaconda可以帮助你创建独立的运行环境,每个环境都可以有不同的Python版本和包。

  • 适用场景:如果你只需要在Python环境级别隔离,例如支持多个PyTorch版本,那么Anaconda足够满足需求。

Docker:

  • 用途:Docker是一个容器管理工具,可以创建一个与当前操作系统隔离的环境。它允许你在容器内运行应用程序,而不受操作系统的影响。

  • 优点:Docker可以解决多人使用一台服务器时的软件版本和系统配置冲突问题。它提供了“一次编译到处运行”的能力,使得容器镜像可以在不同的物理机上运行。

  • 适用场景:
    如果你需要在分发应用程序时在多台不同的物理机上配置运行环境,使用Docker更方便。
    当物理机数量超过10台且需要通信或协同工作时,考虑使用Kubernetes(K8s)。

总之,如果你只需要简单地在不同Python环境之间切换,使用Anaconda;如果你需要更强大的隔离和部署能力,使用Docker


conda还是docker

conda 和 docker 是两个毫不相关的东西

  • conda 是包管理器,可以用来安装 Python 包,管理 Python 环境。
  • docker (docker engine) 是容器管理工具,简单来讲可以创建一个和当前操作系统隔离的环境。

两者使用没有什么共同点。

概念上的共同点,可能只是创建一个“隔离环境”:conda 是在 Python 环境级别隔离,docker 是在操作系统上隔离。就算是使用 docker 创建了操作系统的隔离环境,也依然需要用 conda 或 pip 等包管理器在容器内配置好 Python 环境后才能跑代码。

关于 conda “虽然可以复制环境,但是难免会出现一些奇怪的问题”,我表示震惊。

  • 不会真有人直接把整个 env 拷到别的系统上吧……
  • 出问题大概率是 conda 环境脏了,包括但不仅限于:使用 conda 之外的包管理器装了包;魔改了环境里的东西;驱动(如 CUDA 版本)在不同机器上不一样;环境变量的配置有问题等等
  • 只要环境里的所有包都是 conda 安装的,并用 conda list --export > requirements.txt 导出环境,基本上可以装出一致的环境。

五、在Linux中设置conda时需要注意的一个问题

装 aconda 后ubuntu系统终端界面前部出现(base)字样
不想一直看着(base)怎么解决
1.打开一个终端 ,输入命令:gedit ~/.bashrc
2.在 .bashrc文件最后面添加命令:conda deactivate

再重新打开终端即可消除base字样

若在终端中输入conda deactivate,也可消除base字样,但是一次性的,再次打开终端依然存在base字样。在.bashrc文件添加命令conda deactivate可以永久消除base字样。

Reference

  1. Anaconda介绍、安装及使用教程

  2. 什么是虚拟环境、为什么使用虚拟环境、Anaconda创建、激活、退出、删除虚拟环境

  3. Anaconda 使用conda常用命令

  4. conda还是docker?

  5. conda 和 docker 是两个毫不相关的东西

  6. Docker 入门教程

  7. 使用docker构建镜像,并放到另一台机器使用

  8. (base)的解决方案

posted @ 2024-02-25 23:33  光辉233  阅读(339)  评论(0)    收藏  举报