conda docs
conda docs
部署 conda
初始化 Windows 命令行的 conda 环境
推荐直接使用
Anaconda Powershell Prompt
,无需下列操作
如果想在 powershell/bash/...
等 shell 中使用 conda
,需要进行初始化
1 | conda init [your shell] |
[!tip]
在 Windows 平台中,执行上述操作后,会导致 powershell 启动速度缓慢。可通过conda init --reverse
撤销上述操作。
两种更优解
2024-01-02
找到两种激活 powershell 下 conda 环境的更优解。
默认启动 conda 环境
先找到 Anaconda 安装后自带的 Anaconda Powershell Prompt,右键属性,复制出其中的命令如下
1 | %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'F:\env\anaconda3\shell\condabin\conda-hook.ps1' ; conda activate 'F:\env\anaconda3' " |
这段指令干了三件事:
- 调用系统的 Windows Powershell 修改了脚本执行权限
- 执行 conda 的 hook 脚本
- 激活 base 环境
显然,这个过程可以得到精简:
- 脚本执行权限完全可以持久化,无需每次执行
- 使用更优的 Powershell 取代 Windows Powershell
- 无需默认激活 base 环境
基于此,可以得到新的指令如下:
1 | "C:\Program Files\PowerShell\7\pwsh.exe" -NoExit -Command "& 'F:\env\anaconda3\shell\condabin\conda-hook.ps1'" |
将其添加到 Windows Terminal 即可。
按需手动激活 conda 环境
根据上文可吃 conda 的 hook 是通过 F:\env\anaconda3\shell\condabin\conda-hook.ps1
完成的,因此给该脚本指定一个 alias,需要时调用即可。打开 powershell 的 $profile
,添加如下内容即可。
1 | New-Alias -Name chook -Value "F:\env\anaconda3\shell\condabin\conda-hook.ps1" |
生成 conda 默认配置文件
1 | conda config --write-default |
这将在你的用户根目录下生成一个名为 .condarc
的文件,其中包含 conda 的默认配置选项。
修改 conda 配置路径
先看看当前的配置路径:
1 | conda config --show |
复制其中的 envs_dirs
和 pkgs_dirs
两段配置,然后编辑 ~/.condarc
文件:
1 | envs_dirs: |
重启 shell,执行 conda config --show
查看修改结果。
修改镜像
配置清华源
先执行
1 | conda config --set show_channel_urls yes |
然后编辑用户路径下的 .condarc
,复制以下内容并覆盖
1 | channels: |
即可添加 Anaconda Python 免费仓库。
运行 conda clean -i
清除索引缓存,保证用的是镜像站提供的索引。
查找配置文件的位置
1 | conda config --show-sources |
恢复默认源
要恢复 Conda 到默认下载源,你可以简单地移除或重置之前设置的频道配置。以下是两种方法:
-
移除渠道配置:
你可以通过删除之前设置的频道配置来恢复默认下载源。使用以下命令:
1
conda config --remove-key channels
这将删除所有之前设置的频道配置,使 Conda 回到默认状态,使用默认的 Conda 频道源。
-
重置渠道配置:
另一种方法是重置频道配置为默认值。你可以使用以下命令:
1
2conda config --remove-key channel_alias
conda config --remove-key channel_priority这将删除之前设置的频道优先级和频道别名配置,并将它们恢复为默认值。默认情况下,Conda 使用官方的 Conda 频道源。
使用以上任一方法都可以将 Conda 恢复到默认下载源。这样,在执行 conda install
或其他 Conda 命令时,Conda 将使用默认的下载源来获取软件包。
常用指令
指令 | 作用 |
---|---|
conda env list |
列出所有的 conda 环境路径 |
conda info |
列出当前 conda 环境的配置信息 |
conda create -n [env_name] |
创建环境 |
conda activate [env_name] |
激活指定环境 |
conda deactivate [env_name] |
退出指定环境,回到 base |
conda remove -n [env_name] --all |
删除环境 |
conda remove/uninstall [pkg] |
删除包 |
conda env remove -n [env_name] |
删除环境 |
conda env remove -n <环境名称>
和 conda remove --name <环境名称> --all
都用于从 Conda 中删除环境,但它们之间有一些区别:
-
命令的语法不同:
conda env remove -n <环境名称>
是一种删除环境的方式,其中-n
用于指定要删除的环境的名称。conda remove --name <环境名称> --all
是另一种删除环境的方式,其中--name
用于指定要删除的环境的名称,而--all
用于删除环境中的所有包和依赖项。
-
conda env remove
更直观:conda env remove
命令的语法更直观,因为它专门用于删除环境。这使得它更容易理解和记忆。
-
conda remove
的灵活性:conda remove
命令不仅可用于删除整个环境,还可用于删除环境中的特定包。如果您只想删除环境中的某个包,您可以使用conda remove --name <环境名称> <包名称>
命令。
综上所述,选择使用哪个命令取决于您的需求。如果您只需要删除整个环境,那么 conda env remove
可能更直观。如果您需要更多的灵活性,包括删除特定包,那么 conda remove
可能更适合。
指定路径创建 conda 环境
1 | conda create --prefix=D:\Conda\文件夹名称 python=3.8 |
没有名字的 env 如何启动
1 | conda env list |
此时可以通过路径激活 conda 环境
1 | codna activate D:\env\conda\envs\learn-torch |
为什么会出现这种情况?
不推荐使用直接修改 ~/.condarc
的方式来修改 conda 的默认路径,因为有权限的限制,或者别的什么原因,导致你的修改可能并不会起作用。
1 | ❯ conda config --show envs_dirs |
可以看见, D:\env\conda\envs\
这个路径并不在 envs_dirs
里面,也就是我们建立的环境目录没有加进来。因此,执行下面命令手动添加
1 | conda config --append envs_dirs D:\env\conda\envs |
再次执行 conda config --show envs_dirs
,可以看见该路径已经成功添加。
接下来同步修改一下 pkgs
的路径,毕竟这玩意才是硬盘占用大头
1 | conda config --add pkgs_dirs D:\env\conda\pkgs |
已经
create
的 env 是(没法?)修改的,所以建议直接 remove,或者直接新建,这样新产生的 conda 环境就会在我们指定的路径下。
如何以指定的 conda 环境运行代码
这是我作为初学者冒出的一个问题。后来想明白了发现,这其实是并没有理解 conda 作用的情况下才会提出的。
你的代码相当于一块蛋糕,你准备使用不同的 conda 环境去运行,其实就等价于用不同的餐具吃蛋糕:
- 蛋糕不会因为你使用不同的餐具导致其形状、位置发生变化(你的代码始终在计算机硬盘里某个地方放着,不会被移动、修改)
- 你想用什么餐具去吃,就用手拿什么餐具(
conda activate <your_env>
)
所以,激活对应的 conda 环境后,该怎么执行代码就怎么执行,不需要移动代码到 conda 所在位置或者别的什么操作。
如何在某个 conda 环境下添加新包
下载
1 | conda install <pkgs>=<version> |
查看当前 conda 环境有哪些包
1 | conda list |
修改已建立的 conda 环境的 Python 版本
1 | conda activate <env_name> |
重置 conda 环境
查看历史,按需选择 REV_NUM 数值。一般情况下,0 表示是第一次安装,包括 root 环境和 conda 命令,所以一般为 1 或之后。
1 | conda list --revisions |
通过文件形式下载依赖
例如 requirement.txt
1 | scikit-learn==1.1.3 |
通过如下指令下载
1 | conda install --file requirement.txt |
在 conda 环境中,
<pkg>==<version>
和<pkg>=<version>
之间通常没有区别。两者都表示要安装指定版本的包。
conda 环境下通过 pip 安装的包在哪里?
Windows:
1 | <anaconda安装路径>\envs\<环境名称>\Lib\site-packages\ |
去除 conda 前的 (base) 标识
1 | # 取消 |
conda 路径异常
默认情况下,conda 会安装在 /home/user
下,如果迁移,可能会导致一系列异常。
此时,需要修改:
1 | vim miniconda3/bin/conda |
没错,conda 是一个文本文件,而不是二进制
1 |
|
修改第一行 #!
后的执行文件路径,为迁移之后的 miniconda3
路径。
复制一个 conda 环境
请养成良好的习惯,编写代码时记录下 requirements.txt
!
请养成良好的习惯,编写代码时记录下 requirements.txt
!
请养成良好的习惯,编写代码时记录下 requirements.txt
!
conda 确实可以 clone 一个环境,但这不是写代码不写依赖和 README.md 的理由,all right?
如果是用户自己克隆自己的某个环境,很简单:
1 | conda create --name <创建的环境名> --clone <要克隆的环境名> |
如果是一个用户,克隆另一个用户的环境,直接给 --clone
传入环境敏感参数是不可行的,因为不同用户之间并不可见。因此,可以采取如下两种方式:
-
通过环境配置复刻一个环境。
首先,让原环境的所有者导出其环境的配置文件:
1
conda env export > environment.yml
这将会创建一个名为
environment.yml
的文件,其中包含了环境中的所有包及其版本信息。将其分享给另一个用户,即可凭此创建一个具有相同配置的新环境:1
conda env create -f environment.yml
新环境的名字默认是文件中指定的名字,如果没有指定则需要手动命名。
-
直接访问源环境克隆。
如果知道另一个用户的环境路径,并且对该路径拥有读取权限,理论上可以直接克隆:
1
conda create --clone /path/to/original/env --name new_env_name