Anaconda/Miniconda 学习笔记
Anaconda 是一个用于科学计算的开源 Python 发行版,集成了包和虚拟环境管理器,包括了很多数据科学中常用的包,特别适合数据科学和机器学习。 与之类似的还有 Miniconda,它和 Anaconda 的主要区别就是:Miniconda在安装时并没有附带很多科学计算常用的包,在使用时需要手动下载。除了安装包的大小不同,在实际使用中其实没什么区别。
安装
Anaconda的下载和安装都非常简单,只需要按照官网上的步骤进行即可。 实践中可以选择安装Miniconda而非Anaconda,安装包的体积会小很多。
Miniconda 安装(Windows)
直接下载安装程序,确定安装即可,注意修改一下安装位置。
安装程序可能会提示是否修改环境变量,可以确定,也可以稍后手动进行,我们需要将一些路径到PATH中,例如
1
2
3D:/miniconda3
D:/miniconda3/Scripts
D:/miniconda3/Library/bin
因为Miniconda里面可能有各种乱七八糟的包和软件,为了避免潜在的版本冲突(比如覆盖了其它在外部单独安装的软件),建议将这几个路径添加在靠后的位置。
Miniconda 安装(Linux)
记录一下在Linux中安装Miniconda的过程(官网文档)
在家目录下创建目录
1
mkdir -p ~/miniconda3
下载离线安装脚本(大概几百M)
1
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
执行安装
1
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
删除安装脚本
1
rm ~/miniconda3/miniconda.sh
Anaconda 安装(Linux)
记录一下在Linux中安装Anaconda的过程
下载离线安装脚本,大约1个G(具体版本可能会有所不同)
1
wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
执行安装
1
bash Anaconda3-2024.06-1-Linux-x86_64.sh
删除安装脚本
1
rm Anaconda3-2024.06-1-Linux-x86_64.sh
在安装过程中需要选择安装位置,默认是当前用户的家目录下,将其修改为/opt/anaconda3
即可。
安装脚本可能会提示自动进行conda init
,可以确定,也可以稍后手动进行。
基本配置
安装完成之后,需要在shell(bash,fish,pwsh等)使用conda init
命令,这个命令会自动在shell的启动脚本中添加一段配置,大致内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/path/to/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/path/to/anaconda3/etc/profile.d/conda.sh" ]; then
. "/path/to/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/path/to/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
如果直接执行conda init
报错找不到conda
,可以使用conda
的完整路径来执行,例如
1
2
3~/miniconda3/condabin/conda init bash
/opt/anaconda3/condabin/conda init bash
执行conda init
之后,重新加载配置文件(source ~/.bashrc
)或者退出shell重新进入,即可实现在shell中自动激活conda环境,
此时在命令行中通常会显示(base)
,这代表默认的base环境。
使用下面的命令可以查看conda
现有的完整配置
1
conda config --show
通常我们不希望自动激活虚拟环境,可以使用下面的命令关闭自动激活行为
1
conda config --set auto_activate_base False
如果网络环境不够好,可以添加国内的镜像,例如 1
2conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
这两个配置实际会存储在用户家目录下的配置文件~/.condarc
中,内容大致为
1
2
3
4
5auto_activate_base: false
channels:
- https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- defaults
在配置完成之后,由于Miniconda默认不包含很多常用的库,有必要提前进行下载,例如:
- numpy
- matplotlib
- scipy
- sympy
- pandas
- jupyter notebook
常用操作
下面这些操作对于Anaconda和Miniconda没有区别。
环境管理
默认情况下,conda
会自动创建一个名为base
的基础环境,我们也可以创建其它的虚拟环境,在新的环境中可以指定python版本。
1
conda create --name myenv python=3.8
可以通过克隆已有的环境来创建新的环境 1
conda create --name myenv2 --clone myenv
列出当前的所有虚拟环境 1
conda env list
删除虚拟环境的所有包和虚拟环境自身 1
conda remove --name myenv --all
查看当前环境的信息 1
conda info
环境切换
激活指定的虚拟环境(缺省环境名时会自动激活base
环境)
1
conda activate myenv
退出虚拟环境 1
conda deactivate
conda会通过修改PATH
环境变量以及一些CONDA_
开头的环境变量来实现不同环境的切换,
这使得在不同环境中使用python命令会指向不同目录下的文件,下面是Windows下的例子
1
2(base) D:/anaconda3/python.exe
(myenv) D:/anaconda3/envs/myenv/python.exe
除了先执行conda init
,再执行conda activate
,也可以使用下面的方式进行一次性的配置和环境激活,这对于通过脚本执行的情况很有用
1
source /opt/anaconda3/etc/profile.d/conda.sh && conda activate base
包管理
下面的操作都是在具体的虚拟环境中进行的,操作并不会影响到其他虚拟环境。
列出(当前环境中)已安装的包 1
conda list
在conda仓库中查找包 1
conda search package_name
安装包(可以指定包的版本) 1
2conda install package_name
conda install package_name=1.2.3
更新包 1
2conda update package_name
conda update --all
非常有趣的是,conda update
和conda upgrade
是完全一样的。
卸载包 1
conda remove package_name
使用conda remove
和conda uninstall
是完全一样的。
清理当前环境中的缓存,以及不再需要的文件和包 1
conda clean --all
环境迁移
下面提供两种虚拟环境迁移的方法。
第一种方法,通过如下方式导出包列表 1
conda list --explicit > spec-list.txt
其中的内容大致为 1
2
3
4
5
6
7
8# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
@EXPLICIT
https://repo.anaconda.com/pkgs/main/win-64/blas-1.0-mkl.conda
https://repo.anaconda.com/pkgs/main/win-64/ca-certificates-2024.7.2-haa95532_0.conda
https://repo.anaconda.com/pkgs/main/win-64/icc_rt-2022.1.0-h6049295_2.conda
...
然后在别的计算机中可以通过 spec-list.txt
文件创建环境
1
conda create --name newenv --file spec-list.txt
第二种方法,通过如下方式导出环境信息 1
conda env export > environment.yml
其中的内容大致为 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15name: base
channels:
- defaults
dependencies:
- altgraph=0.17.3=py312haa95532_0
- anyio=4.2.0=py312haa95532_0
...
- zstd=1.5.5=hd43e919_0
- pip:
- dukpy==0.4.0
- mutf8==1.0.6
- you-get==0.4.1718
prefix: D:/anaconda3
然后在别的计算机中可以通过 environment.yml
文件创建环境
1
conda env create -f environment.yml
两种方式有如下区别:
- 第一种方式导出的信息是和平台(操作系统)相关的,因此不能在不同的平台之间迁移;第二种方式则可以跨平台迁移。
- 第一种方式得到的信息更精确,可以精确复刻虚拟环境;第二种方式得到的信息则比较粗略,因为考虑到不同平台上可能存在的差异。
这两种方式都只是导出了一个信息列表,因此还需要在目标平台上进行联网下载和安装; 除此之外,
Conda-pack
也是一种环境迁移的方式,并且它是包括二进制文件的,大致相当于直接打包,因此显然需要保证二进制文件在目标平台可以顺利运行。
conda底层细节
conda在管理虚拟环境的过程中,实际上除了修改PATH环境变量,还会控制如下几个特殊的环境变量:
CONDA_DEFAULT_ENV
:表示当前激活的 conda 环境的名称CONDA_EXE
:指向 conda 可执行文件的完整路径CONDA_PREFIX
:执行当前激活的 conda 环境的路径CONDA_PROMPT_MODIFIER
:用于修改命令行提示符的环境变量,通常是环境的名称加括号,例如(base)
,并且会出现在命令行提示符的前面CONDA_PYTHON_EXE
:指向当前 conda 环境中 Python 解释器的路径CONDA_SHLVL
:表示当前激活的 conda 环境的层级(没有激活是为0,激活后变成1,允许嵌套激活)
这些变量都是由conda管理的,也会影响conda和其它工具的行为。
对于Python自身来说,实际的运行也会涉及到一些
PYTHON
开头的环境变量,例如PYTHONPATH
。
可以使用如下方法查看当前的所有CONDA
开头的环境变量
1
2
3
4
5powershell
Get-ChildItem Env: | Where-Object { $_.Name -like "CONDA*" }
bash
env | grep '^CONDA'
例如在完成conda init配置后,登陆shell时的默认情况通常为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# Windows(powershell)
CONDA_DEFAULT_ENV base
CONDA_EXE D:\miniconda3\Scripts\conda.exe
CONDA_PREFIX D:\miniconda3
CONDA_PROMPT_MODIFIER (base)
CONDA_PYTHON_EXE D:\miniconda3\python.exe
CONDA_SHLVL 1
# Linux(bash)
CONDA_EXE=/home/fenglielie/miniconda3/bin/conda
CONDA_PREFIX=/home/fenglielie/miniconda3
CONDA_PROMPT_MODIFIER=(base)
CONDA_SHLVL=1
CONDA_PYTHON_EXE=/home/fenglielie/miniconda3/bin/python
CONDA_DEFAULT_ENV=base
在完成conda
init配置,并设置conda不自动激活环境时,登陆shell时的默认情况通常为
1
2
3
4
5
6
7
8# Windows(powershell)
CONDA_EXE D:\miniconda3\Scripts\conda.exe
CONDA_PROMPT_MODIFIER False
# Linux(bash)
CONDA_EXE=/home/fenglielie/miniconda3/bin/conda
CONDA_SHLVL=0
CONDA_PYTHON_EXE=/home/fenglielie/miniconda3/bin/python
这里Windows(powershell)和Linux(bash)的表现略有不同。手动激活环境后,环境变量就会变得和上面的状态一致。