背景介绍
学校机房,CPU节点的账号可以联网,可以pip install 非常方便,但是GPU节点不能连接外网,导致很不方便. 所以想办法从CPU这边下好各种环境,再迁移到GPU那边。
参考文章
离线情况下“拷贝”另一个账号的python包
离线情况下创建conda虚拟环境
方法步骤
离线安装anaconda
这个网上有很多,我记得是下载安装包,然后用winSCP上传到GPU,然后执行脚本安装,我安装了一个3.8.1的python,然后配置环境变量什么的。
创建环境
因为我要用3.6的python环境,所以我执行了下面的指令:
conda create -n python_CPU_3_6 python=3.6
然后他很***的出现了网络错误。然后我切到CPU账户下做了下面几件事情:
- 安装anaconda3
- conda create -n python_CPU_3_6 python=3.6
- pip install 各种我需要的包
一切准备完成,我利用scp将CPU中的anaconda3/env 和 anaconda3/pkgs 文件夹发给我的GPU账户,然后切回GPU账户的根目录:
conda create -n python_GPU_3_6 python=3.6 --clone ~/env --offline
这样就成功创建了环境,当然其他老哥说要用CPU中的pkgs文件夹覆盖GPU中anaconda3中的pkgs文件夹,但是我没这么做好像成功了。
拷贝库
切换到CPU目录下:
我新建了一个叫transfer的文件夹,然后执行下面的指令
conda activate python_CPU_3_6
pip freeze >~/transfer/requirements.txt
pip download -r requirements.txt -d ~/transfer/data
之后SCP给我烦人的GPU
切换到GPU账户下:
conda activate python_GPU_3_6
cd transfer
pip install --no-index --find-links=./date -r requirements.txt --user
这里,文章中的老哥有个地方我实际尝试的时候发生错误,他没有最后–user的选项,我运行的时候报错了,shell提示我加上这个,我加上就不报错了,可能是权限的问题,这个有老哥可以解释下吗?
总结
我的理解是pip freeze将CPU节点里面的包的名字写在requirement.txt里面,然后通过pip download按照txt里面的名字把安装包下好,然后打包发给离线的可怜的GPU,最后利用打包的信息离线安装