Conda 配置虚拟环境、jupyter kernel 以及环境迁移
Miniconda 是一个 python 简约发行版,集成了 python、pip、conda 等,利用 conda 进行 python 软件包管理非常方便。另外,也可以为特定的项目创建特定的运行环境,再结合 jupyter 等能够非常方便切换各种独立环境。下面给出如何利用 conda 创建特定环境、配置不同 jupyter kernel 以及环境迁移。
安装 Miniconda
从官网下载 miniconda 并安装
1 | # 安装最新版 miniconda |
其他历史版本请从 miniconda archive 官网下载。
安装特定环境
conda update
创建新的环境,命名为 toplayer,安装 python 版本 3.8
1 | # 如果安装 miniconda 时没有初始化,需要初始化,重新登陆 |
如果长时间未更新 conda,可以使用下面方式更新:
1 | conda update -n base -c defaults conda |
创建虚拟环境
1 | # 安装虚拟环境 |
或者通过 yaml 创建虚拟环境,具体地,首先编写 yaml 配置文件,这里命名随便,如 test.yaml:
1 | name: toplayer |
然后,使用如下命令安装:
1 | conda env create -f test.yaml |
删除虚拟环境
1 | # 删除虚拟环境 |
注意,conda 版本要求 4.6+
列出所有安装的环境
1 | # 在主环境下 |
安装 jupyter kernel
在虚拟环境安装需要的软件
1 | # 首先激活虚拟环境 |
此时,刷新 jupyter notebook 就可以从 kernel 中看到名为 Python3(toplayer) 的 kernel
ipynb文件过大,导致加载慢:
加载慢大多是因为 ipynb 运行结果多导致的,可以尝试清空每个单元格的结果。通过命令行,可以实现:
1 | # 保留原 ipynb,导出一个没有输出结果的 ipynb |
卸载不想要的 jupyter kernel
查看有哪些 jupyter kernel
1 | jupyter kernelspec list |
显示结果如下(示例)
1 | Available kernels: |
删除不需要的 kernel
1 | jupyter kernelspec uninstall toplayer |
环境迁移
适用于纯 pip 安装的包
把包写入文件
1 | # 可能包含类似 file:///tmp/... 这样的内容,不方便安装 |
安装
1 | python -m pip install -r requirements.txt |
适用于纯 conda 安装的包
假设已经安装有 miniconda 或 anaconda,并配置好环境变量。
把包写入文件
1 | conda list --export > requirements.txt |
安装
1 | conda create --name <env> --file requirements.txt |
适用于 conda 和 pip 混合安装的包
假设已经安装有 miniconda 或 anaconda,并配置好环境变量。同时,conda init <bash/zsh> 已经激活
把包写入文件
1 | # 先进入环境 |
安装
在新的服务器上已经安装好 miniconda 或 anaconda,并配置好环境变量。同时,conda init <bash/zsh> 已经激活
1 | # 直接根据配置文件创建环境 |
迁移到无网络环境机器上
当我们想要把外网(能够连接互联网)上的某个 conda 环境(如:/usr/local/miniconda/envs/sam
)迁移到内网(不能够连接互联网)上的某个机器上。我们可以直接把外网的带迁移的 conda 环境打包到内网机器上(需要内网机器安装了 conda),基本步骤如下:
- 下载
miniconda.sh
、打包压缩/usr/local/miniconda/envs/sam
为sam.zip
; - 拷贝
miniconda.sh
和sam.zip
到内网机器; - 在内网机器先安装
miniconda.sh
,添加到环境变量,然后激活 conda:conda init
- 解压
sam.zip
,如解压到/root/sam
- 克隆
/root/sam
到 conda 新环境:1
conda create -n sam-new --clone /root/sam
在第5步中或者直接解压 sam.zip
到一个目录,即可使用。使用时请使用完整 Python 路径
另一种解决方法是使用包 conda-pack:
1 | pip install conda-pack |
多虚拟环境运行程序
对于创建有多个虚拟环境的服务器,当运行 python 程序时会调用哪个虚拟环境中的模块呢?
一句话,你使用哪个虚拟环境中的 python 就调用哪个虚拟环境中的模块.
因此,建议在命令行运行程序时使用 python 的完整路径,如:
1 | # 调用 base 环境中的模块 |