前言

本文是陆爻齐平时经常使用 conda 的一些记录,且作为复习笔记罢

正文

创建环境

conda create -n name python=3.9.*
这条语句的意思是创建名字为 name,python 版本为 3.9 中最新的版本的环境,-n 后面跟名字,python 也可先不确定,但还没试过后面安 python。

查看环境

conda env list
会列出所有已有的虚拟环境

删除环境

conda remove -n name --all
删除名字为 name 的环境

克隆环境

conda create -n name --clone other
将名为 other 的环境复制到新环境 name 中

更改存储和环境的地方

参考网址
执行以下命令设置将虚拟环境安装到/root/autodl-tmp/conda/envs, 包缓存到/root/autodl-tmp/conda/pkgs

1
2
3
4
5
mkdir -p /root/autodl-tmp/conda/pkgs
conda config --add pkgs_dirs /root/autodl-tmp/conda/pkgs

mkdir -p /root/autodl-tmp/conda/envs
conda config --add envs_dirs /root/autodl-tmp/conda/envs

打包环境

参考知乎文章

构建环境的操作系统必须与目标的操作系统匹配。这意味着在Windows上构建的环境不能重新定位到Linux。

打包

1
2
3
4
5
6
7
8
# 把虚拟环境 my_env 打包为 my_env.tar.gz
conda pack -n my_env

# -o 参数指定打包路径和名称,把虚拟环境 my_env 打包为 out_name.tar.gz
conda pack -n my_env -o out_name.tar.gz

# 把某个特定路径的虚拟环境打包为 my_env.tar.gz
conda pack -p /explicit/path/to/my_env

解压使用

linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建目录 `my_env`,并将环境解压至该目录
mkdir -p my_env
tar -xzf my_env.tar.gz -C my_env

# 使用python而不激活或修复前缀。
# 大多数 python 库可以正常工作,但需要处理前缀的部分将失败。
./my_env/bin/python

# 激活环境,同时这步操作会将路径 `my_env/bin` 添加到环境变量 path
source my_env/bin/activate

# 在环境中运行python
(my_env) $ python

# 从激活环境中清除前缀。
# 请注意,也可以在不激活环境的情况下运行此命令
# 只要机器上已经安装了某个版本的python。
(my_env) $ conda-unpack

# 此时,环境与您在此路径直接使用 conda 安装的环境完全相同。
# 所有脚本都应该工作正常。
(my_env) $ ipython --version

# 停用环境以将其从环境变量 path 中删除
(my_env) $ source my_env/bin/deactivate

windows

新建 my_env 文件夹,将打包的 my_env.tar.gz 文件解压到该文件夹中。

使用 cmd 打开路径 my_env 所在路径

1
2
3
4
5
6
7
8
9
10
11
# 进入项目路径
cd C:\my_env

# 激活环境
.\Scripts\activate.bat

# 从激活环境中清除前缀。
.\Scripts\conda-unpack.exe

# 退出环境
.\Scripts\deactivate.bat

修复无法激活环境的问题

问题发生情景:在 activate 环境时,报错如 UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 790: illegal multibyte sequence Unexpected cygpath error ('NoneType' object has no attribute 'strip')

问题排查过程:经解读报错和查阅资料发现,该问题是由于 conda 在启动环境的过程中,读取到了非正常字符。想到最近安装了微信开发者工具,让环境变量的 Path 中出现了中文,故删除对应的环境路径,再启动环境就正常了

总结:环境变量 Path 中出现的中文让 conda 激活环境失败