夸客
夸客
Published on 2023-03-02 / 9 Visits
0
0

Anaconda3 环境迁移详细过程

最近需要在离线的服务器上做些时间序列数据的分析,需要用到的一些诸如 darts、sktime、scikit-learn 库在 Anaconda 中是没有安装的,由于离线服务器无法联网、单独下载安装包的话有很多依赖难以处理,所以想到了将 Anaconda 的虚拟环境进行迁移。搜索了网上一些教程,发现没有完整的详细过程,中间遇到了一些坑,记录一下备查。

1. 从联网计算机中导出已经安装完成的虚拟环境

1.1. 在联网计算机中克隆虚拟环境

我直接使用默认的 base 环境,所以将所有的包安装完成后,直接克隆 base 环境,因为默认的 base 环境是无法导出的。打开 Anaconda Prompt,执行克隆命令,注意 win10 系统有时需要以管理员身份运行获得权限,命令如下:

#命令格式:conda create -n 新环境的名称 --clone 老环境名称
#对于我而言实际执行的命令:conda create -n 2023 --clone base

这样的话就完成了base环境的克隆,新的环境名称为2023,用于base中安装的一切包。可以在命令行中查看联网机目前的环境,具体命令是:

conda info --envs

1.2. 安装虚拟环境打包工具并导出克隆好的环境

conda-pack 是打包工具

conda install -c conda-forge conda-pack

具体的打包命令如下:

conda pack -n 2023 -o 2023.tar.gz

默认打包在 C 盘:/用户/用户名的文件夹中

2. 离线服务器中的操作

2.1. 安装同版本的 Anaconda。

以免出现未知错误。

2.2. 拷贝解压打包环境

将打包好的虚拟环境压缩包放到离线服务器同版本 Anaconda 路径下的 envs 文件夹内,解压。

2.3. 设置默认激活的环境为解压后的新环境

解压前如果有打开 Anaconda 需要关闭重启后再操作该步骤,打开 Anaconda Navigator,点击左上角首选项,将默认打开的环境设置为新解压的虚拟环境,在本例中即为 2023.

2.4. 为 jupyter 注入 ipython

如果是习惯使用 jupyter 的话会发现,即使默认设置了新环境,打开 jupyter 新建 ipynb 文件会发现报错,找不到 ipython 内核。
这个主要是虽然迁移了包组,但离线服务器 Anaconda 的 ipython 没有链接到新迁移过来的环境中,但我实际操作发现如果修改配置文件直接将离线服务器的 python.exe 链接了到 jupyter,新迁移环境的包组是无法使用的,因为 jupyter 打开的 python 内核属于离线机器的 base 环境。所以需要两步走。

2.4.1. 先修改配置文件

打开 Anaconda Prompt 命令行,可以看下左边提示的是否为 base 环境,如果是,执行以下命令查看 python.exe 的位置。

jupyter kernelspec list

该命令可以看到离线服务器 python.exe 的的具体路径,复制保存。
在离线服务器解压位置往下寻找以下路径……2023\share\jupyter\kernels\python3,找到 kernel.json 文件打开编辑。
将该文件中的 python.exe 的路径参数修改为刚才复制到的路径。

2.4.2. 为 jupyter 注入 ipython

打开 Anaconda Prompt 命令行,先使用命令激活 2023 环境。

conda activate 2023
python -m ipykernel install --user --name 2023 --display-name “python2023”

执行结束之后重启 jupyter 就会发现有名为 python2023 的新 kernel 选项了,这个 kernel 是链接到 2023 新环境了,可以导入迁移的包。
到此整个迁移就算完成了。

2.5. 修改 jupyter lab 的默认工作目录

2.5.1. 生成配置文件

执行命令后在 C:\Users\.jupyter\ 目录下生成 jupyter_lab_config.py 文件。

jupyter lab --generate-config

2.5.2. 修改配置文件中默认工作目录路径

打开 jupyter_lab_config.py 文件找到 c.ServerApp.root_dir 字段,先去掉注释,然后修改为代码所在的目录,注意 Windows 中文件路径的转义。
备注:后续我可能还得探索下新加入个别包组的话要如何迁移,每次迁移整个包好像挺费时间的,遇到了再补充。


Comment