打包 conda 环境

conda 环境的转移和使用

Posted by Klaus on September 4, 2024

前言

要在实习公司的服务器上运行一个项目,但是因为服务器不能联网,所以常规的pip install在线安装就不能用了。

曾经尝试过用联网的主机把对应的安装包(*.whl or *.tar.gz)下载下来再通过SFTP转移到服务器上安装,但在实际操作过程中会有如下问题导致环境安装不成功:

  • 比如服务器是aarch64架构,自己的主机pip download会找不到某些适合的安装包,虽然可以去 pypi 单独下载,但是单独下载的安装包可能会缺少必要的依赖,最终一层层依赖寻找下去可能会找不到对应的安装包,或者依赖的版本有冲突,或者依赖根本装不上。

最终的解决方法是通过一个联网的主机把环境安装好,进行conda pack操作,将打包好的压缩包env_name.tar.gz转移到未联网的服务器上。

设备和软件需求(根据我的情况)

服务器是aarch64架构,Ubuntu 22.04系统,必须是Python3.10所以需要有相同配置的机器,也可以做一个虚拟机。

  1. UTM(用来创建虚拟机,Mac可以下载,可以找其他替代)
  2. 对应的 aarch64 的 Ubuntu系统文件(我下载的Ubuntu 24.04,和服务器的不相同但是也能用)
  3. Termius(用来连接服务器,有SFTP功能传文件到服务器上,可以替代)

创建虚拟机

参考——–>虚拟机UTM安装ubuntu(Applce M1,M2芯片)

虚拟机安装conda & 创建环境

  1. 进入虚拟机后,这个虚拟机应该是可以联网的,下载对应版本的conda安装包:

    wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-aarch64.sh

  2. 安装conda:

    bash Miniconda3-latest-Linux-aarch64.sh

  3. 创建conda环境并安装项目依赖(pip install -r requirements.txt)

打包conda环境到压缩包

  1. 激活对应的环境

  2. 先安装conda-pack,pip install conda-pack

  3. 打包conda环境到*.tar.gz

conda pack -n 环境名称 -o myenv.tar.gz

文件转移

1. 使用主机的terminal将虚拟机的myenv.tar.gz转移到主机

通过scp进行转移,确保你的对应的虚拟机是开启的,下面的代码是在主机的terminal进行的:

scp 虚拟机账户@虚拟机IP地址:虚拟机上要转移的文件地址 主机上存储此文件的地址

例如:scp username@192.168.1.100:~/myenv.tar.gz ~/Downloads

查看虚拟机的IP可以在虚拟机上输入:ip addr

2. 将主机上的myenv.tar.gz转移到服务器

直接用 termius 的 SFTP 功能即可

环境压缩包的使用

在服务器上找到压缩包,把它转移到一个空文件夹(如 ~/anaconda/envs/ft)里,切换路径到这个空文件夹。运行: tar -xzf myenv.tar.gz。此时环境已经在服务器上建立。可以通过~/anaconda/envs/ft/bin/activate激活。

注:910B服务器不建议在~/.bashrc中设置conda initial,会报错。