赞
踩
在初学Python之时,就常听别人说用 conda 有多方便,一直不以为然,直到接触需要调用有大量依赖库及版本间有显著差异的深度强化学习领域时,才知道用 conda 管理环境会有多方便,那么什么是 conda?
Conda 发行并开源于 2012 年,是一个可以在Windows、maxOS和Linux上运行的包和环境管理系统,它能够适用于任何语言的打包和分发,包括Python、R、Ruby、Lua、Java、C/C++等。Conda 允许用户方便地安装、运行和更新不同版本的二进制软件包与该计算平台所需要的所有库(以及库的依赖项)。在实际当中,利用 conda 最主要的目的是为了使得不同版本Python环境、不同版本模块能够共存和灵活切换。
在默认配置下,conda可以安装和管理来自repo.anaconda.com仓库的7,500多个软件包,该仓库由Anaconda生成,审查和维护。
除了 conda,我们常常看到的 Anaconda 和 Miniconda 又是什么呢?接下来将介绍 conda 与它们之间的区别。
诸如 Anaconda、Miniconda、Bioconda(用于计算生物学)等都是基于 conda 的工具软件,这些软件均包含 conda 包和环境管理器,但两者的概念仍要进行一定的区分。
Anaconda 是一个大而全的软件发行版,是一个预先建立和配置好的模块集,能够安装在操作系统上使用。它包含了Python本身和数百个第三方开源项目的二进制文件,如 numpy、scipy、ipython、matplotlib等,这些库基本是为了方便处理数据科学相关的问题。
Miniconda 也是一个软件发行版,但它仅包含python、conda 和 conda 的依赖项,本质上就是一个空的用来安装 conda 环境的安装器,它没有 Anaconda 中那么多的包,可以理解为 Anaconda 的精简版,能够方便用户按照自己的需求,从零开始构建任意的环境。
尽管可以独立地下载安装 conda 而不用 Anaconda 和 Miniconda,但后两者为提供了 conda 安装环境,使用起来会更方便。
Conda 作为软件包管理器,可以帮助用户查找和安装软件包,这与另一个常见的基于Python的跨平台包管理器 pip 类似。那既然 Python 自带了 pip 包管理工具,为什么还会需要使用 conda 呢?
先来介绍 pip,它是 Python 包的通用管理器,全称是 Pip Install Packages
,它是一个Python官方认证的包管理工具,只能管理python包而无法安装非Python依赖项,例如HDF5、MKL、LLVM等,通常用于在相互独立的环境中安装发布在 Python Package Index(PyPI)上面的包。Pip和 PyPI 均由Python Packaging Authority(PyPA)管理和支持。
而 conda 既具有 pip 的包管理能力,同时也具有 vitualenv 的环境管理功能,因此在相互独立的环境中,可以简单认为 conda 就是 pip 和 vitualenv 的组合,在包管理这方面,conda 不仅能管理 python 包,还可以管理任何类型的、用任何语言写的包和依赖,包来源是 Anaconda repo(默认)和 Cloud。
简单而言,pip 与 conda 最关键的区别在于,在使用 pip 之前,必须通过系统软件包管理器下载和安装python解释器,而 conda 可以直接安装 python 软件包以及解释器,但 conda 只能在 conda 环境下安装各类的包,因此需要先创建 conda 环境。
这里我们演示 Miniconda 的下载安装,软件包的下载来源有两种:
(1)检查系统条件是否满足
在下载安装 Miniconda 之前,先检查下电脑的系统及硬件等条件是否符合安装要求。如果因为系统版本较旧的原因,可以下载对应的旧版本 Miniconda,以下是官网中对系统要求的描述。
(2)下载相应安装包
如下图,以 Windows installers 为例,不同版本的 Miniconda 安装包可以支持的最高版本的 python 情况不同,可以按需下载,这里我下载了支持 python3.12 的软件版本,安装文件为:Miniconda3-latest-Windows-x86_64.exe
。
(3)执行安装
运行安装包执行文件,依次点击下一步即可,可以自定义安装的路径,中间的安装设置按照默认的来即可。
(4)检查是否安装成功
完场上述步骤之后,需要再检查下 conda 是否能够正常使用。在电脑左下角搜索找到 Anaconda Prompt
,点击打开后,在控制台中输入 conda --version
,回车如果返回了 conda 版本信息则说明安装成功。
在窗口中输入 conda list
,会返回当前环境下已经安装好的包,如果出现该列表则说明 conda 已经正确安装。其中,包含了对应的解释器 python3.12.2。
至此完成了 conda 包和环境管理工具的安装,此时我们可以进行一些简单的配置并尝试创建 conda 环境,安装需要的库和运行简单的 python 程序。
Conda 包管理器下载各类库的来源是国外的服务器,常常会面临下载速度慢的问题。可以为 conda 添加软件包通道(channel),以清华源为例,在打开的 Anaconda prompt
控制台窗口中,输入如下命令可以将清华源的两个地址添加到通道。
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 软件包通道的下载链接时能显示我们手动配置的通道地址,可以通过如下命令进行设置:
conda config --set show_channel_urls yes
如果不配置下载源,conda 会使用默认的软件包通道,即从官方 Anaconda 仓库获取软件包。具体的软件包通道情况可以通过 conda config --show
命令查看,返回的信息不仅能看到下载源的地址信息,还能看到创建的 conda 环境所在的文件夹。如果想要重置下载源的信息,可以用 conda config --remove-key channels
命令实现。
当然,除了通过命令行的形式添加下载源,也可以直接修改配置文件 .condarc
,在 Windows 系统下,它通常位于 “C:\Users\用户名\” 路径下,可以手动添加如下内容进行配置:
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
只有在执行前面的配置下载源的命令时才会出现 .condarc
文件,默认情况下时没有的,如果没有该文件,可以自己手动创建一个文件并写入以上的内容,保存后,conda 将会使用其中配置的下载源来获取软件包。
现在来到 conda 的另一大功能,就是环境管理,它可以创建、管理和切换不同的环境,这些环境之间是相互独立的,每个环境当中的 Python 版本和软件包版本可以不相同,使得我们可以把依赖版本不同的项目放在同一台设备上的不同 conda 环境中运行。
conda 命令不仅可以在 anaconda prompt 控制台当中运行,默认会进入到 conda 环境,也可以在 cmd 或者各类 IDE 当中的控制台输入 conda 命令,不过此时就得先激活并进入到 conda 环境。
要创建一个新的 conda 环境,可以使用 conda create
命令,指定该环境下所需的 Python 版本和要安装的软件包。例如:
conda create --name myenv python=3.8 numpy matplotlib
这将创建一个名为 myenv
的环境,并在其中安装 Python 3.8
、NumPy
和 Matplotlib
。在创建环境时,会有软件包列表的提示。输入 y
确认后即等待环境创建即可。
如果不想要一个环境了,例如我们要把 myenv 这个名字的环境删除,可以通过如下命令进行删除:
conda remove --name myenv --all
该命令会删除 myenv 环境及环境下所有的安装包,该操作是不可逆的,在执行之前需确认好。
经过环境的创建之后,我们用 conda env list
来查看已有的 conda 环境,发现已经创建好了名为 myenv 的环境,但是此时我们根据如下位置判断我们所在的 conda 环境仍然是名为 base 的环境,因此我们要激活并切换到 myenv 环境中。
通过如下命令可实现激活并切换环境的功能,不同系统上的命令有所区别。
# windows
conda activate myenv
# Linux/Unix
source activate myenv
如果不切换环境,而只是退出当前环境,可以用 conda deactivate
退出当前的 conda 环境。
当我们要在不同环境下安装库时,需要先切换到指定环境当中,例如我们要下载或者卸载 scipy
,可以执行如下命令进行:
# 下载安装
conda install scipy
# 卸载
conda remove scipy
当我们想要保存某个环境的配置信息,例如下载源信息、环境的Python版本信息、安装的包的版本信息等,可以先切换到指定环境下,通过以下命令将这些配置信息导出:
conda env export > environment.yml
该命令会将当前的环境配置信息导出到为 environment.yml 配置信息文件,文件导出地址默认为当前工作目录(也可以指定输出的绝对地址)。这时候,我们将配置文件传到另一台电脑,想基于该配置文件创建 conda 环境,可以通过以下命令:
conda env create -f environment.yml
这里我们写一个名为 test.py 的简单的 python 脚本,但用到需要额外安装的 numpy
库,代码如下:
import numpy as np
array = np.random.rand(10)
mean = np.mean(array)
print(mean)
将该脚本文件放到控制台的工作目录下(或者把控制台工作目录切换到脚本文件的位置),输入如下命令:
python test.py
至此,关于 conda 的常见入门知识就介绍完毕,大家可以先养成使用 conda 的习惯,再去慢慢体会它的优点,非常实用的技能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。