Anaconda环境离线迁移

Anaconda是python常用的包和环境管理器,在生产过程中,有时候需要对环境进行迁移。本文参考Anaconda官方教程,并结合自身经验,提供了将一台可以联网并可以运行目标程序的源计算机A上的环境迁移到一台不能联网的目标计算机B上的解决方案。

在源计算机A上:

该部分在Linux和Windows上操作相同

1. conda-pack安装

推荐使用conda-pack工具进行环境打包,conda-pack是一个命令行工具,它能够打包环境中安装的所有二进制包,满足离线迁移的要求。注意确保目标计算机具有与源计算机相同的平台和操作系统,并且两台计算机的Anaconda版本要保持一致。在base环境中安装conda-pack,从而使其在子环境中可用。conda-pack可以在conda-forge或PyPI上获得。

  • conda安装(推荐)
conda install -c conda-forge conda-pack
  • pip安装
pip install conda-pack

2. 环境打包

文中所有的my_env均为要迁移的环境名,需根据实际情况进行替换,如tensorflow-gpu等。

# 将虚拟环境 my_env 打包为 my_env.tar.gz
conda pack -n my_env

执行完这条命令后会在命令行的当前路径下找到一个my_env.tar.gz的压缩包,该压缩包即为打包的环境,将该压缩包拷贝到目标计算机B上。


在目标计算机B上:

  • Linux
# 切换到Anaconda环境目录
cd /root/anaconda3/envs

# 创建`my_env`文件夹
mkdir -p my_env

# 将环境解压到 `my_env`,`~/my_env.tar.gz`是环境压缩包的绝对路径
tar -xzf ~/my_env.tar.gz -C my_env

# 激活环境
source /root/anaconda3/envs/my_env/bin/activate

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

# 停用环境
(my_env) $ source /root/anaconda3/envs/my_env/bin/deactivate 
  • Windows

在Anaconda的安装目录下打开envs文件夹,新建my_env文件夹,将压缩包my_env.tar.gz中的文件解压到该文件夹中。

打开cmd命令行

# 激活环境
C:\ProgramData\Anaconda3\envs\my_env\Scripts\activate.bat

# 停用环境
C:\ProgramData\Anaconda3\envs\my_env\Scripts\deactivate.bat

在根据不同的操作系统执行完上述代码后,该环境已经添加到目标计算机中,可以像使用原生conda环境一样使用它,如使用conda activateconda list等命令。至此,conda环境移植完毕。


如果需要迁移的是tensorflow的gpu环境,要确保python、tensorflow、cuda、cudnn版本相对应,可参考官方文档(参考英文文档,中文文档内容更新不及时🙃)。

Anaconda | Moving Conda Environments
Python | Conda pack 进行环境打包
Conda-Pack — conda-pack 0.7.0 documentation