最近需要在离线的服务器上做些时间序列数据的分析,需要用到的一些诸如 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 中文件路径的转义。
备注:后续我可能还得探索下新加入个别包组的话要如何迁移,每次迁移整个包好像挺费时间的,遇到了再补充。