引言
当有需要在离线环境下为Linux服务器安装对应环境的需求时,本文是标准的流程。
所要安装的环境:centos7.9 安装pytorch环境
网上其他方式尝试
首先我的window下是用的conda的python环境,首先想到的是利用conda的打包功能将环境打包。具体步骤如下:
下载miniconda Linux版本
从 清华源下载anaconda Linux版本,我使用的是Anaconda3-2019.10-Linux-x86_64.sh。
安装miniconda3
bash ./Anaconda3-2019.10-Linux-x86_64.sh
初始化conda
/opt/anaconda3/bin/conda init
激活base环境
source \~/.bashrc\
这一步是离线环境下的conda安装和环境启用,这里在之后的文章中会多次用到,当出现安装conda环境时就是进行上面的步骤
在window上打包conda环境
把虚拟环境 my_env 打包为 my_env.tar.gz
conda pack -n my_env
-o 参数指定打包路径和名称,把虚拟环境 my_env 打包为 out_name.tar.gz
conda pack -n my_env -o out_name.tar.gz
把某个特定路径的虚拟环境打包为 my_env.tar.gz
conda pack -p /explicit/path/to/my_env
在离线环境下安装
在annaconda中创建目录 my_env
,并将环境解压至该目录
mkdir -p my_env
tar -xzf my_env.tar.gz -C my_env
激活环境,同时这步操作会将路径 my_env/bin
添加到环境变量 path
source my_env/bin/activate
在环境中运行python
(my_env) $ python
结果
使用conda env list 命令能够显示对应的环境,不过使用环境时python版本才2.7,应该是centos7.9默认python版本,没有试过在完全相同的centos7.9环境中下载打包能否成功,不过如果是那样的话不如直接将anaconda3/envs/my_env/Lib/site-packages全部复制到离线环境下的相同目录下***(注意anaconda3的版本和必须完全一致)***,这个方法是可以成功的不过与我们的标准部署就背道而驰,假如你的项目需要发布,则这种方式就不规范,因为不可能限定生产环境的conda环境,万一生产环境有其他项目部署,且他们的conda环境与这个项目不同就会部署失败。***正确的做法应该是提供whl安装包和requirements.txt 很多开源项目也是这么做的。***接下来我会介绍这种做法。
生成whl包和requirements.txt文件
windows的conda环境是无论如何也无法移植到centos7.9上的,所以还是需要使用centos7.9的conda环境来下载相关包。可以使用虚拟机运行一个centos7.9环境。使用vmware非常简单可以看这篇 博客。
有网环境安装anaconda环境
见上文
创建python环境
conda create -n XXX python=3.8
使用环境
source activate XXX;
换源
中科大源
pip config set global.index-url <https://mirrors.ustc.edu.cn/pypi/web/simple>
清华源
pip config set global.index-url <https://pypi.tuna.tsinghua.edu.cn/simple>
下载包
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
获得whl包
mkdir whl
pip wheel torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --wheel-dir /whl
生成requirments.txt
pip freeze > requirments.txt
这个requirment.txt是不是很熟悉,在很多开源项目中都是存在的,他们就是通过这种方式发布。
这里需要注意的是必须是在install情况下产生的requirments.txt才是正确的,***如果是pip download 先下载,再使用本地下载的whl包进行安装,这种情况下pip freeze参数的包信息就不正确。***可以试一下在本文的操作结束过后在离线环境下使用pip freeze产生的requirments
将上面两个生成的东西拷贝到离线环境
mkdir wheel
拷贝到wheel文件中
离线环境安装conda环境
见上文
在base环境下安装
pip install --no-index --find-links=./wheels -r ./wheel/requirements.txt
也可以不使用requirements.txt直接通过pip install ./wheels/*.whl来进行安装,不过那样就不规范了。