Anaconda 安装及包管理工具 conda 进行虚拟环境包管理的基本操作
在基于 python 进行数据分析、机器学习等领域的实践和学习时,由于代码的更迭和更新,运行他人实现的代码或尝试安装新的工具库时往往需要指定特定版本的其他工具库,以满足特定环境的构建条件。而将同一工具库的不同版本或者具有相似功能的不同工具库堆积在同一个环境下显然会为环境的管理和使用增添负担。故而,根据不同的任务要求,为不同的需求和应用创建相互分离的环境,使得不同任务的环境不会相互干扰和影响,是一种自然而然的选择。上述为特定的任务和需求而配置构建的环境一般被称为虚拟环境。目前,比较常见的虚拟环境管理工具包括 virtualenv 和 conda 等。本文主要记录使用 Anaconda 提供的包管理工具 conda 进行虚拟环境管理的基本操作命令,供学习与交流。
简介
Anaconda 是一种 Python 语言的免费增值开源发行版,用于进行大规模数据处理、预测分析,和科学计算,致力于简化包的管理和部署(维基百科))。 Anaconda 使用软件包管理系统Conda 进行包管理,为用户对不同版本、不同功能的工具包的环境进行配置和管理提供便利。
通过 Anaconda 所提供的 conda 工具创建的环境一般位于安装目录的 envs 目录下,如笔者创建的环境的默认保存路径即位于 /path/to/anaconda3/envs 目录。
Anaconda 安装
目前 Ubuntu 环境下 Anaconda 提供直接安装的脚本文件 .sh,这里以 Ubuntu 环境下 Anaconda 的安装简要介绍一下其安装流程。Anaconda 的官方安装教程在这里 Anaconda Document——Installation。
用户可以通过 Anaconda 官网( Anaconda Distribution )或者对应的镜像网站获取 Anaconda 的安装包,一般而言 Anaconda 下载在镜像网站如 清华大学开源软件镜像站——Anaconda 镜像使用帮助 的速度更快,其中包含有下载 Anaconda 安装包的链接。可以使用 wget 命令下载文件( 下载至命令行的当前目录 ),或者直接点击下载链接( 一般通过浏览器下载至 ~/Downloads 目录 )。
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh //下载上述镜像网站中的 Anaconda3-5.2.0-Linux-x86_64.sh 至本地
由于 .sh 为脚本文件,需要通过 shell 运行该文件以进行 Anaconda 的安装过程,进入到下载有 Anaconda 安装包的目录,运行该脚本文件。
bash Anaconda3-5.2.0-Linux-x86_64.sh //运行 Anaconda 的安装脚本
安装大致流程如下( Anaconda3-5.2.0-Linux-x86_64 为例 ):
1. 首先阅读对应的许可证( 进入后可通过回车或空格翻页 ),在阅读完成后,键入 yes 表示同意许可内容,继续安装过程;
2. 选择 Anaconda 的安装路径,默认路径为用户主目录的 Anaconda 路径,对应即为 /home/test/anaconda3,键入回车键表示使用默认的安装路径,脚本会创建指定的目录并存放对应的文件内容;
3. 后续的一般流程都选择默认配置即可( 即一路键入回车 )。这里有几个地方需要注意,一个是安装过程中,Anaconda 提示 “Do you wish the installer to prepend the Anaconda3 install location to PATH in your/usr/.bashrc ?”,这个选项选择 yes 时,会将 Anaconda 的可执行文件路径放在 .bashrc 文件中 PATH 的最前端,此时若 /home/test/anaconda3/bin 和 /usr/bin/ 目录下存在同名的可执行文件( 如 python 解释器在上述两个目录中均存在 ),通过命令行执行命令时,会先匹配到 Anaconda 安装目录中的可执行文件。对于 python 解释器而言,即为优先使用 Anaconda 安装的 python 解释器( 而不是系统自带的解释器 )。另一个注意点是在安装的最后,Anaconda 会提示是否要安装 vscode 编辑器,该选项用户可根据自己的需要选择是否安装。
安装完成后,查看用户根目录下的 .bashrc 文件( 如 vim ~/bashrc 查看该文件最后一行,或者直接使用用户比较熟悉的编辑器打开即可 ),可以看到最下面的 PATH 路径已经被加入了 Anaconda 的可执行路径。
此时要注意,虽然 .bashrc 文件已经将 Anaconda 的可执行目录加入用户的 PATH 路径,但此时命令行运行的 Shell 仍为之前的版本( 仅在开始时执行过 .bashrc 文件,后续该文件修改后并没有自动更新 ),通过 echo $PATH 命令查看可知命令行的 PATH 变量中还不包含有 Anaconda 的可执行目录,此时需要刷新当前命令行的 shell 或者说让其重新执行 .bashrc 文件,可以通过下面的 source 命令。执行完成后,刷新后的命令行通过 echo $PATH 显示的内容中即会看到 Anaconda 的可执行目录位于最前面。
source ~/.bashrc //使得当前 shell 重新执行一次 .bashrc 文件的内容
此时再直接键入命令行 python,首先被匹配的即为 Anaconda 可执行目录中的 python 解释器( ~/anaconda3/bin/ 目录中 ),而不是系统自带的 python 解释器( /usr/bin/ 目录中)。此时 Anaconda 的安装即完成。
后面介绍下 Anaconda 提供的工具 conda 可以使用的简单操作。
创建环境
用户通过 conda create 命令创建新的环境,环境默认位于 envs 目录下,可通过 python=x.x 指定 python 版本,没有指定时,创建的环境中使用的 python 版本与当前系统使用的版本一致。在使用上述命令时,可在最后附加需要安装在该环境中的包的名称,从而在创建的环境中安装对应的包。
conda create -n/—name env_name [python=x.x][package_name] //创建名为 env_name 的环境,可进一步指定使用的 python 版本和该环境中安装的包
使用示例:
创建名为 py2 的环境,使用的 python 版本为 python2:
conda create -n py2 python=2 //创建名为 py2 的环境,其中的 python 版本为python2
创建名为 yh 的环境,并在其中安装 scipy 包:
conda create —name yh scipy=0.15.0 //创建名为 yh 的环境,并安装 scipy 0.15.0 包,其使用的版本为当前使用的 python 版本
上述安装到环境中的包均可通过 package=x.x 的方式指定特定安装包的版本。
查看环境
使用 conda env list 命令查看已有的 conda 环境,包括环境的名字和其对应的目录。
conda env list //列出对应环境以及对应的目录
使用和退出环境
进入创建的虚拟环境
source activate env_name //进入名为 env_name 的环境
退出当前的虚拟环境
source deactivate //退出当前的虚拟环境
这里,activate 和 deactivate 命令文件位于 anaconda 安装目录下的 bin 目录中,但一般而言在安装时设置其不具备可执行权限,故而想要执行上述程序需要在前面加入 source 命令,source 会读取指定文件的内容( 这里即 activate 和 deactivate ),并在当前 shell 执行该文件的内容。在较新版本的 conda 环境中,也可以通过命令 conda activate env_name 进入创建的环境。
删除环境
在使用 conda deactivete 退出某个环境之后,可以通过 conda env remove 命令来删除某个环境,注意使用该命令时需要通过 -n 选项来指定要删除的环境的名字。
conda env remove -n test //删除名为 test 的 conda 环境
conda常用命令
conda list (-n env_name) //显示环境中安装的包的信息 conda install (-n env_name) package //在特定环境中安装包 conda remove (-n env_name) package //移除特定环境中的包 conda remove —all -n env_name //移除特定环境中的所有包
conda 命令既可以直接针对当前虚拟环境进行操作,也可通过 -n 参数指定针对某个特定的环境进行操作。当不指定 -n 参数时,默认针对当前环境进行操作。
更多的命令可以通过 conda 的 -h 选项查看对应的帮助文档,来了解命令的参数等信息。
分享环境
conda 允许用户通过 .yml 文件的方式共享其创建的环境,从而使得其他用户能够根据上述命令构建一致的实验/操作环境。
导出环境配置的文件
conda env export > environment.yml //将当前环境的配置导出到 environment.yml 文件中
上述命令会将当前环境下的 pip 包和 conda 包配置导出到 environment.yml 文件中,其他用户可通过上述文件构建新的与 .yml 文件配置保持一致的环境。
根据 .yml 文件创建环境
conda env create -f environment.yml //根据 environment.yml 文件创建新的环境
创建的新环境的名称在 .yml 文件的第一行 name 字段中已经指定好。
MISC——虚拟环境结合 vscode 的使用
当当前环境下创建有多个不同的虚拟环境时,在使用如 vscode( virtual studio code )时也需要指定当前项目所特定的运行环境,打开一个 python 项目,并通过 ctrl + shift + p 打开命令行工具,输入 Python: Select Interpreter ,即可选择当前项目所需使用的虚拟环境。
上述操作若在 vscode 的欢迎界面( 未打开任何项目时 )执行,则操作指定的是后续 vscode 打开 python 项目的默认环境,用户也可以在特定的项目中通过上述操作指定新的特定于项目的虚拟环境。
下图可以看到,笔者系统上的环境包括 ubuntu 自带的 python 环境,即 /usr/bin/ 目录下的 python 解释器,以及笔者通过 Anaconda 创建的若干虚拟环境,如最下方的 ~/anaconda3/envs/theano/bin/ 目录下的 python 解释器,其中笔者创建的环境名对应为 theano,该环境的目录为 ~/anaconda3/env/theano ,该环境安装的 python 解释器位于该目录下的 /bin 目录中,即对应 ~/anaconda3/env/theano/bin/python,此时只需根据任务需要选择合适的运行环境即可。