conda
conda是一个跨平台、语言无关的二进制包管理器。conda 的核心理念是环境(environments)是一等公民,我们可以在多个独立的环境中隔离包。
conda 并不是虚拟环境,而是一个包管理工具
安装
conda 是anaconda的一部分,anaconda 包含了 250 多个用于数据分析、机器学习的包,不过他是商业软件。anaconda 剥离了其中的包管理工具就是conda并将其开源还提供了 conda 最小环境的安装工具miniconda。
安装 conda 最简单的方式就是通过 miniconda 来安装,我们可以到miniconda 官方源下载他。他提供了 exe(windows) 以及 sh(类Unix) 两种安装方式:
curl -fLo miniconda3.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod 755 ./miniconda3.sh
./miniconda3.sh
之后会询问一些问题,然后会安装他们到 $HOME/miniconda3
目录下。推荐更改一下,例如 $HOME/.conda
目录下。
安装完成后重启 shell 能够在命令行看到 (base)
字样说明安装完成。 他会在 .bashrc 或其他 shell 脚本中添加一些运行脚本,其中会运行 bash.sh 脚本以及将 $CONDA_PREFIX/bin
添加到 PATH 中。
$CONDA_PREFIX
环境变量是当前活动环境所在路径,他会随着激活环境的不同而改变
默认启动环境
默认会自动激活 base 环境,可以通过 conda config --set auto_activate_base false
来取消这个行为,还有通常不建议使用 base 环境,他其中包含了一些 conda 命令依赖的包(例如著名的 requests),如果你修改了 base 环境的包可能会导致 conda 异常。因此通常不要在 base 环境中安装其他包。
可以在
.bashrc
中添加conda activate <ENVIRONMENT_NAME>
来更改默认激活的环境,命名可以以 py311 这样的方式。
更新
conda 本身也是一个 conda 包,我们可以通过它来更新自己:
可能会出现问题,因此应当尽可能从新的 exe 或 sh 中安装
配置
conda 会在以下路径搜索配置文件 .condarc
:
- system:
/etc/conda/.condarc
- user:
$XDG_CONFIG_HOME/conda/.condarc
or$HOME/.condarc
- local:
$CONDA_PREFIX/.condarc
默认情况下这些文件都不存在,他会在首次运行conda config
时创建~/.condarc
文件。例如:
.condarc
文件是 yaml 格式的,上面的语句生成的 yaml 字符串为:
可以使用
conda config --describe
获取所有可用的选项说明
设置 channels
conda 使用 channels 来管理软件源,默认包含一个 defaults 他指向: https://repo.anaconda.com/
的 pkgs/main
和 pkgs/r
。windows 中还包含 pkgs/msys2
。
default 包含了 anaconda 官方维护的所有包,但很多 pip 的包并不在官方包里面。不过社区维护一个conda-forge channel
,我们可以手动安装他们:
https://anaconda.org
是一个托管平台允许用户上传开源包
配置国内镜像
清华源提供了 anaconda 的镜像,只需要在 $HOME/.condarc
中写入:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
之后还需要conda clean -i
来清理下换成确保用的是镜像站点。
安装默认包
可配置在创建新环境时自动安装一些包:
环境管理
环境(environments)是 conda 中的一等公民。使用 conda 可用创建、导出、列出、删除、更新以及激活环境:
########### 创建环境 #####################
# -n/--name venv_name 指定环境名
# package 是要安装的包,可用使用 pyton=3.9 来安装指定包
# 如果是 conda 环境外需要使用 conda env 来创建
conda [env] create [options] -n venv_name [pacage ...]
# 可用的配置项
# --clone venv_name 克隆现有环境
# --file requirements.txt 指定依赖文件自动安装其中的软件包
# -c/--channel channel_name 指定搜索包的通道
# --no-default-packages 不使用 create_default_packages 配置
########## 导出环境 #################
# 导出 venv_name 到指定文件
# 如果不指定 -n 使用当前环境,如果不指定 -f 输出到 stdout
conda env export [-n/--name venv_name] [-f/--file file/to/path]
########## 列出所有环境 #################
conda env list
# conda environments:
#
base * /home/yangguodong/.conda
########## 删除环境 #################
# 删除指定环境,注意必须先停用他才能够删除
conda env remove -n venv_name
########## 更新环境 #################
# 基于环境文件更新环境
# --prune 会删除环境文件中没有定义的包
# 环境文件由 conda env export 导出
conda env update [-n/--name venv_name] [--prune] -f env_file
########## 激活/分离环境 #################
# 激活环境
conda activate venv_name
# 分离环境
conda deactivate
分享环境信息
有三种方式分享环境信息:
pip freeze > requirements.txt
: python 标准方式conda list --explicit
: conda 标准方式conda env export -f env.yaml
: 分享环境(包含更多内容)
包管理
包管理无外乎就是查找、安装、卸载和更新:
########### 查找包 #####################
# -c 指定搜索的 channel
conda search package_name [-c/--channel channel]
########### 安装包 #####################
# 可以指定 package_name=x.x 可以包含 x.*
conda install package_name [-c/--channel channel]
########### 删除包 #####################
conda remove package_name
########### 更新包 #####################
conda update package_name
########### 列出所有包 #####################
conda list