前言
要在实习公司的服务器上运行一个项目,但是因为服务器不能联网,所以常规的pip install
在线安装就不能用了。
曾经尝试过用联网的主机把对应的安装包(*.whl
or *.tar.gz
)下载下来再通过SFTP转移到服务器上安装,但在实际操作过程中会有如下问题导致环境安装不成功:
- 比如服务器是
aarch64
架构,自己的主机pip download
会找不到某些适合的安装包,虽然可以去 pypi 单独下载,但是单独下载的安装包可能会缺少必要的依赖,最终一层层依赖寻找下去可能会找不到对应的安装包,或者依赖的版本有冲突,或者依赖根本装不上。
最终的解决方法是通过一个联网的主机把环境安装好,进行conda pack
操作,将打包好的压缩包env_name.tar.gz
转移到未联网的服务器上。
设备和软件需求(根据我的情况)
服务器是aarch64
架构,Ubuntu 22.04
系统,必须是Python3.10
所以需要有相同配置的机器,也可以做一个虚拟机。
- UTM(用来创建虚拟机,Mac可以下载,可以找其他替代)
- 对应的 aarch64 的 Ubuntu系统文件(我下载的Ubuntu 24.04,和服务器的不相同但是也能用)
- Termius(用来连接服务器,有SFTP功能传文件到服务器上,可以替代)
创建虚拟机
参考——–>虚拟机UTM安装ubuntu(Applce M1,M2芯片)
虚拟机安装conda & 创建环境
-
进入虚拟机后,这个虚拟机应该是可以联网的,下载对应版本的conda安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-aarch64.sh
-
安装conda:
bash Miniconda3-latest-Linux-aarch64.sh
-
创建conda环境并安装项目依赖(pip install -r requirements.txt)
打包conda环境到压缩包
-
激活对应的环境
-
先安装conda-pack,
pip install conda-pack
-
打包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,会报错。