conda 是个复杂的 Python 版本管理隔离工具,这里我只是简单介绍一些 Conda 的常用命令,详细请参考:命令 — conda 24.7.1 文档 。
管理conda
1. 帮助指南
🛠️ 获取帮助
当我们不确定某个conda
命令的具体用法时,可以通过添加-h
或--help
参数来查看该命令的使用说明:
1 | conda [order_name] -h |
🔍 信息查询
当我们想要了解Conda本身或环境的基本信息时,可以使用conda info
命令。该命令也支持添加参数以获取更准确的输出:
1 | conda info # Example: show .condarc |
conda info
常用查询参数:
查询参数 | 功能 |
---|---|
--envs |
列出当前用户已知的Conda环境 |
--system |
显示系统级环境变量信息 |
此外,Conda也支持查询所有Python环境的相关信息(如果以管理员身份运行,Conda会查询全部用户的所有Python环境):
1 | conda search --envs |
2. 配置概述
Conda有两种管理配置信息的方式,一种是通过conda config
指令管理,另一种是通过编辑.condarc
文件管理。值得一提的是.xxxrc
在计算机领域很常见,rc
是Resource Configuration
的缩写,通常用作存储应用程序或命令行工具的用户偏好设置和配置选项,例如:.npmrc
、.nvmrc
。
⚙ 使用conda config
命令配置
查看Conda环境配置的方法有两种:一种是--show
,该命令只会查询字段的当前配置 ;另一种是--get
,该命令可以查看对该字段进行变更的指令记录 。
1 | Show all config |
查看Conda环境配置字段的含义以及当前配置:
1 | conda config --describe [field_name] |
管理Conda环境配置数据,需要注意的有:--add
与--prepend
实现的效果是一样的;--add
等操作是用于数组类型,而--set
是用于值类型。
1 | conda config --append <Key> [Value] |
📝 编辑.condarc
文件
当我们使用conda info
查看当前Conda的信息时,可以看见以下两个信息:
user config file | populated config files |
---|---|
C:\Users\lzz\.condarc | C:\Users\lzz\.condarc |
其中populated config files
是指当前Conda运行实例已加载的Conda配置信息我们可以编辑windows的环境变量,来实现加载项目目录中.condarc
文件的目的。
1 | set CONDARC=%CD%\.condarc # Add condarc path |
我们也可以根据Conda提供的.condarc
查找策略来设置.condarc
文件路径:
1 | if on_win: |
当有多个populated config files
存在时,也就是Conda读入了多个.condarc
文件时,Conda遵循以下优先策略:
- 当配置值是数组或者列表时按优先级合并,若为原始值时保留到优先级高的配置;
- 各
.condarc
优先级由低到高依次为:解析器的.condarc
→ $CONDARC 指定的.condarc
→config order
参数 → 环境变量;
当我们使用conda config
编辑.condarc
文件时,可以通过--system
、--env
、--file [file_name]
来指定配置输出位置:
参数 | 功能 |
---|---|
--system |
[默认选项] 输出到User Config File (C:\Users\lzz\.condarc )中 |
--env |
输出到当前活动环境下的.condarc 中,如果没有则同--system |
--file [filename] |
输出到指定.condarc 文件中 |
3. 版本与更新
我们可以使用如下指令查看,更新Conda版本。
1 | # Check conda version |
4. 通道配置
Conda官方的库提供的Python包较少,有时需要到第三方社区维护的Conda通道去找寻相关的Python包,例如:conda-forge 、bioconda 。故我们需要配置 default_channels 与 custom_channels 为Conda提供多个下载通道。
值得一提的是,在使用Conda管理的Python 项目也可以使用pip
安装所需的包,但是这种conda install
与pip install
混用的情况很容易导致库的依赖关系混乱。
🔗 设置官方通道及其镜像通道
我们打开.condarc
后会发现Conda自动帮我们加入了channels: -default
,而且官方通道的地址不是在.condarc
中配置的,故我们只需要配置官方通道的镜像源即可。
我们可以直接在 channels 里面添加官方通道的镜像源:
1 | conda config --add channels [channel_url] |
也可以将官方通道的镜像源添加到 default_channels 里面,以便与conda-forge等第三方社区通道区分开来:
1 | conda config --add default_channels [channel_url] |
🧱 添加社区通道
使用第三方社区通道(如 conda-forge),我们需要配置channels: -[community_name]
:
1 | conda config --add channels [community_name] |
对于第三方社区通道的地址,我们通常不用配置镜像源直接配置其地址即可。需要注意的是使用命令行工具添加配置的过程较为特殊,这里建议直接修改.condarc
即可。可别忘了--add
于--set
的区别。
1 | conda config --set custom_channels.[community_name] [channel_url] |
指定第三方社区通道下载包:
1 | conda install [package_name] --channel [community_name] |
🎯 优先级问题
关于 channels 的优先级问题,我们可以使用--describe
去查看Conda官方的介绍。channels 中越靠前优先级越高,--prepend
、--append
来控制 channel 的插入顺序。当Conda要下载东西的时候便会从优先级高的通道依次查找到优先级低的通道。
我们可以通过改变channel_priority
配置来改变Conda下载策略:
- flexible:只要在 所有通道 中找到了对应库便下载,不会引起 unsatisfiable error。在下载没有指定版本的包时,包版本高的优先。
- strict:如果 高优先级通道 没有找到对应库便会报错。在下载没有指定版本的包时,通道优先级高的优先。
1 | conda config --set channel_priority strict |
⚙️ 其他通道配置
show_channel_urls:控制着Conda是否在执行操作(如搜索、安装或更新包)时显示通道的
URL
。channel_alias:通道别名,Conda会先在 channels 与 custom_channels 中进行匹配,如果没找到相对应的完整
URL
,则会根据 channel_alias 进行补全,其默认值如下:1
2
3
4
5
6
7
8
9
10
11
12
13conda config --describe channel_alias
# Result:
# channel_alias (str)
# The prepended url location to associate with channel names.
#
# channel_alias: https://conda.anaconda.org
conda install GDAL -c conda-forge
# Result:
# Equals toCondainstall GDAL -c
# https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
📄 .condarc
示例配置
1 | channels: |
5. 缓存相关
🗑️ conda clean
命令
参数 | 说明 |
---|---|
-i 、--index-cache |
删除索引缓存 |
-t 、--tarballs |
删除缓存的软件包压缩包 |
-a 、--all |
删除索引缓存、锁定文件、未使用的缓存软件包、压缩包和日志文件 |
-p 、--packages |
从可写软件包缓存中删除未使用的软件包(注意!此模式不会检查使用符号链接返回软件包缓存安装的软件包) |
-f 、--force-pkgs-dirs |
删除所有可写的软件包缓存,此选项未包含在--all 中(注意!此模式将破坏使用符号链接返回软件包缓存安装软件包的环境) |
📂 设置包缓存文件夹
我们可以使用conda config
为 pkg_dirs 添加包缓存目录。
1 | conda config --add pkgs_dirs [package_cache_path] |
我们分别使用config info
与--describe
来查看该配置。可以发现Conda自带包缓存的文件夹。
1 | conda info |
我们可以使用conda clean
清空 pkgs_dirs 里面的包缓存。
1 | conda clean --f |
管理环境
1. 查询环境
我们可以通过env
或者info
指令查看 conda environments 。
1 | Next three order equals ot each other |
2. 环境管理
🆕 创建环境
我们可以create
指令创建一个全新的Python虚拟环境:
1 | conda create [env_name] |
也可以根据environment.yaml
来还原一个环境:
1 | conda env create --file [env_name].yml |
🗑️ 删除环境
remove
指令可以用于删除环境,也可以用于删除指定环境中的包:
1 | Delete specified env and all packages in it |
💾 导出环境配置
env
指令用于环境的导入导出,注意env.yml
文件中已有虚拟环境名称:
1 | Get env.yml |
🚀 使用环境
1 | conda activate [env_name] |
3. 包管理
📄 查询包
Conda查询包有两个指令,一个是list
,其用于查询已安装的包;
1 | For all environments |
list
还有以下参数可选,用于查看包安装的详细信息:
参数 | 说明 |
---|---|
--explicit |
在输出时显示包的确切版本号 |
--show-channel-urls |
在输出时显示包的来源URL |
另一个是search
,其用于在 channels 中查询指定包。请注意conda search
还有个查询电脑上Python环境的功能。
1 | conda search [package_name] |
search
还有以下参数可选,用于更好的查询包:
参数 | 说明 |
---|---|
--channel |
指定查询的通道 |
--limit |
限定查询结果显示个数 |
--info |
显示查询结果的详细信息 |
📥 安装包
我们使用conda install
安装包,我们可以在安装的时候指定包的版本、查找的channel 。有些包的下载过程中需要我们在命令行输入Y
,--yes
可以帮我们自动输入。
1 | conda install [package_name] |
这里还需要补充在使用时需要注意的几个参数:
参数 | 说明 |
---|---|
--force-reinstall |
确保请求安装的包卸载并重新安装 |
--freeze-installed 、--no-update-deps |
不要更新或更改已安装的依赖项 |
还需要注意的一点是:Conda只支持在官方通道和第三方社区通道安装包,如果要安装.wheel
格式的包,请使用pip
安装,这时候需要注意之前提到的环境污染问题。
🗑️ 卸载包
我们使用conda uninstall
卸载包,需要注意conda uninstall
默认同时删除包的依赖,如果使用--force
,则不会删除其依赖。
1 | conda uninstall [package_name] |
我们可以使用conda uninstall --help
查看Conda对--force
的描述。不要轻易使用--force
,这会使我们的环境变得破碎不稳定。
1 | # --force-remove, --force |
♻️ 更新包
我们使用如下指令更新指定包到最新版本,如果要更新到指定版本,请使用功能更强大的conda install
。
1 | conda update [package_name] --name [env_name] |