使用conda进行环境管理和包管理

使用conda进行环境管理和包管理

conda是anaconda中的环境管理器和包管理器。

对于conda的操作都发生在命令行内,我们可以打开Anaconda Prompt进行操作。或者在项目根目录下使用终端进行操作。

1. conda总述

在使用conda前,我们先检查conda是否已经被安装,以及当前版本是否是最新。

1
2
3
4
5
6
7
# 检查conda是否已经安装好,此命令会返回你安装Anaconda软件的版本
conda --version
>> conda 4.3.40

# 通过以下命令升级conda到最新版本
# 如果有新版本可用,在提示proceed ([y]/n)? 中输入y进行升级
conda update conda

什么是虚拟环境?

虚拟环境是一种将Python解释器和安装的包从主系统环境中隔离出来的机制,使得您可以在同一台计算机上同时管理多个独立的Python环境。

使用Anaconda,您可以创建具有独立Python解释器和软件包集合的虚拟环境。这使得您可以为不同的项目或任务创建干净的、隔离的Python环境,每个环境可以具有不同的Python版本和库依赖,而不会相互干扰。

您可以使用Anaconda的命令行工具(如conda)或Anaconda Navigator图形用户界面来创建和管理这些虚拟环境。通过创建虚拟环境,您可以避免在全局范围内安装软件包,从而降低包冲突和管理依赖关系的难度。这对于项目之间的隔离和管理非常有用,同时也是一种良好的实践,特别是在开发和部署Python应用程序时。

虚拟环境与实际环境的区别

虚拟环境和实际环境(也称为全局环境或系统环境)之间有几个主要的区别:

  1. 隔离性:
    • 虚拟环境:创建虚拟环境时,它会在系统环境中创建一个独立的隔离环境。在虚拟环境中,您可以安装和管理特定的Python解释器版本和软件包,而不会影响其他虚拟环境或全局环境。这种隔离性允许您在不同的项目中使用不同的Python版本和依赖项,避免包冲突和版本问题。
    • 实际环境:实际环境是系统的全局环境,其中安装的所有Python解释器和软件包对整个系统可见和共享。因此,全局环境中的更改可能会影响所有项目和应用程序,可能导致依赖冲突和意外行为。
  2. 独立性:
    • 虚拟环境:虚拟环境是独立于系统环境的,它们可以在同一台计算机上同时存在多个,每个虚拟环境都是独立的实体。
    • 实际环境:实际环境是整个系统的Python环境,没有明确定义的隔离边界。
  3. 安装和管理:
    • 虚拟环境:创建和管理虚拟环境通常由特定的工具负责,例如Anaconda中的conda命令或Python中的venv(Python 3.3+)或virtualenv工具。这些工具使得创建、激活和删除虚拟环境变得非常简单。
    • 实际环境:在全局环境中安装和管理软件包通常需要管理员权限,并且可能更容易导致不希望的系统级更改。
  4. 用途:
    • 虚拟环境:用于隔离和管理项目的依赖关系,使得项目开发和部署更加可控和可靠。
    • 实际环境:是系统的全局Python环境,可以用于一般的Python开发和运行环境。

相同版本的包在各个虚拟环境不会重复占用空间

在绝大多数情况下,虚拟环境之间采用相同版本的包不会重复安装或重复占用存储空间。这是因为虚拟环境是独立的,它们使用硬链接(hard links)的方式来共享包,而不是复制包的实际文件。

当您在创建一个新的虚拟环境时,它会使用现有的Python解释器,并在指定位置创建一个新的目录结构,其中包括一份完整的包列表,以满足虚拟环境的依赖。然而,在文件系统级别上,并不是将包的内容复制到新的虚拟环境目录中。相反,虚拟环境目录中的包实际上只是指向全局环境中已经安装的包的硬链接。

由于硬链接指向同一个物理文件,虚拟环境之间共享的包不会重复占用额外的存储空间。这也是虚拟环境的一个优势,因为它允许您在系统上创建多个独立的Python环境,而不会浪费大量的存储空间来存储重复的包。

需要注意的是,某些特殊情况下,如果您在全局环境中进行不当的修改或删除包,可能会影响到虚拟环境之间的包的完整性。因此,建议仍然保持虚拟环境的独立性,并使用虚拟环境管理工具来安装、更新和删除包,以确保环境的稳定性和一致性。

AnaConda与MiniConda的区别

Anaconda和Miniconda都是由Anaconda, Inc.提供的Python发行版本,它们有一些区别:

  1. 安装包的大小和内容:
    • Anaconda:Anaconda是一个大型的Python发行版,包含了大量的预安装的科学计算和数据科学软件包,如NumPy、Pandas、Matplotlib、SciPy、Jupyter等,以及一些常用的数据分析工具和库。Anaconda安装包的大小通常在数GB左右。
    • Miniconda:Miniconda是一个更轻量级的Python发行版,它只包含了最基本的Python解释器和Conda包管理器,没有预安装其他任何额外的软件包。安装Miniconda后,您可以根据需要自己安装所需的软件包。Miniconda安装包的大小通常在几十MB左右。
  2. 默认安装的软件包:
    • Anaconda:Anaconda默认安装了大量的科学计算和数据分析相关的软件包,适合需要快速开始数据科学工作的用户。
    • Miniconda:Miniconda只包含了基本的Python解释器和Conda包管理器,用户需要根据自己的需求手动安装所需的软件包。

2. 环境管理

环境管理是Python使用中的一大好习惯,如果你不想在一遍遍重装Python和系统中折腾循环,那么环境管理是学习Python的过程中非常必要的一环。现在我们用conda进行环境管理。

创建环境

1
2
3
4
5
# 创建一个环境名为py34,指定Python版本是3.4
#(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)
conda create --name py34 python=3.4
# 通过创建环境,我们可以使用不同版本的Python
conda create --name py27 python=2.7

激活环境

1
2
3
4
5
# 在windows环境下使用activate激活
activate py34

# 在Linux & Mac中使用source activate激活
source activate py34

激活后,会发现terminal输入的地方多了(py34)的字样,这表示我们已经进入了py34的环境中。

克隆环境

1
conda create -n conda-env2 --clone conda-env1

conda-env2是新创建的环境,conda-env1是旧环境

重命名环境

  1. 进入你的Anaconda安装目录
  2. 再进入目录下的envs目录
  3. 找到你要重命名的环境的同名文件夹,给这个文件夹重命名,这样就成功给环境重命名了。

退出环境

1
2
3
4
5
# 在windows环境下使用deactivate
deactivate

# 在Linux & Mac中使用source deactivate
source deactivate

删除环境

如果你不想要这个名为py34的环境,可以通过以下命令删除这个环境。

1
conda remove -n py34 --all

可以通过以下命令查看已有的环境列表,现在py34已经不在这个列表里,所以我们知道它已经被删除了。

1
conda info -e

3. 包管理

我们使用conda进行第三方包的安装、卸载和更新。

对于包的下载,我们可以先设置国内镜像。这是因为http://Anaconda.org的服务器在国外,所以conda在下载包的时候速度往往很慢。所幸清华TUNA镜像(https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)有Anaconda仓库的镜像,我们将其加入conda的配置,即可解决这个问题。

1
2
3
4
# 添加Anaconda的TUNA镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

接下来我们进行包的安装,请进入指定的环境中(比如上节中的py34),这里我们以pandas(一个数据处理和分析的包)为例进行操作。

查看已安装的包

1
2
#使用这条命令来查看在当前环境中,已安装的包和对应版本
conda list

查找可安装的包

1
2
3
#我们可以通过search命令检查pandas这个包是否可以通过conda来安装
#命令返回了这个包的信息,所以是可以通过conda安装的
conda search pandas

安装包

1
2
3
#通过install安装pandas
#如果pandas已经存在于环境中,会提示已经安装,否则在提示proceed ([y]/n)? 中输入y进行安装
conda install pandas

更新包

1
2
#通过update更新pandas
conda update pandas

卸载包

1
2
#通过remove卸载pandas
conda remove pandas

以上就是conda对于包的安装、更新和卸载。值得一提的是,conda将conda、python等都视为包,因此,完全可以使用conda来管理conda和python的版本,例如

1
2
3
4
5
6
7
8
9
# 更新conda到最新版本,这里conda被当作一个包处理 
conda update conda

# 同样的,也可以更新anaconda到最新版本
conda update anaconda

# 更新python
# 例如我们所启用的环境是py34,使用的是python3.4,那么conda会将python升级为3.4.x系列中的最新版本
conda update python

4. 使用environment.yml管理conda环境

environment.yml文件是一个YAML格式的文本文件,其中包含用于创建和配置Conda虚拟环境的信息,包括Python版本和需要安装的软件包列表。

下面是使用environment.yml的步骤:

  1. 创建environment.yml文件:在项目根目录下创建一个名为environment.yml的文本文件。
  2. 编辑environment.yml文件:使用文本编辑器打开environment.yml文件,并指定要创建的虚拟环境的名称、Python版本以及需要安装的软件包。例如:
1
2
3
4
5
6
7
8
9
10
name: myenv  # 虚拟环境的名称
channels:
- defaults
dependencies:
- python=3.8 # 指定Python版本
- numpy
- pandas
- matplotlib
# 添加其他需要的包

  1. 创建虚拟环境:使用conda env create命令根据environment.yml文件创建虚拟环境。执行以下命令:
1
conda env create -f environment.yml
  1. 激活虚拟环境:虚拟环境创建后,使用以下命令激活虚拟环境:
1
conda activate myenv

conda activate myenv

这样就会进入名为myenv的虚拟环境,其中包含在environment.yml文件中指定的所有软件包和Python版本。