【Linux】安装了两个conda,如何迁移虚拟环境?
写在前面
不知不觉就把事情搞复杂,是我的天赋Orz...
这篇终于解决了Linux集群关于conda的历史遗留问题。
事情是这样的,最早我接触集群的时候,所有人的软件都是安装到一个叫software的文件夹下的,当时刚了解conda,看到集群有其他人装过Anaconda2,就简单设置了个环境变量就开始构建我的各种虚拟环境了。
这个过程中遇到很多问题,尤其是安装R和R包的安装过程,各种报错和无法安装,那个时候我以为是conda不好用,现在看其实是安装权限的问题。
于是,在又双叒叕遇到R包安装限制的时候,我痛定思痛终于在自己目录下安装了Anaconda3。
随着R装包限制的解除,新的问题又来了,我之前辛辛苦苦调试好的各种虚拟环境随着conda环境变量的改变,难道都不能用了么???
所以,我要解决的问题是“在同一个Linux集群上安装了两个conda,如何迁移虚拟环境?”
下面请欣赏我摸爬滚打的过程。。。
初级解决方法
最初的我懒得动脑,就搞了个最麻烦的办法,就是同时设置两个conda的环境变量,使用哪个conda的虚拟环境,就把另外一个注释掉。
vi ~./bashrc
#conda 1
export PATH="/software/Anaconda2/bin/:$PATH"
#conda 2
#export PATH="/myname/Anaconda3/bin/:$PATH"
但问题是,我总有同时需要两个conda创建的虚拟环境的时候吧,比如我用conda 1创建的py3.5环境提交了一个脚本,但又想用conda 2创建的R4.0环境画图,那怎么办,总不能单线程处理问题,那太浪费时间了。
于是我开始问度娘,得到了这个问题的解决方法。
进阶解决方法
迁移虚拟环境,然后环境变量的conda就只设置自己目录下的那个地址。
进阶方法一
参考:conda虚拟环境离线迁移(Linux系统亲测好用)
这个方法也可以打包一份所有的虚拟环境备份保存,便于以后使用。
Step1:激活想要迁移的虚拟环境,在其中安装conda-pack工具包
source activate env_name
conda install conda-pack
conda isntall -c conda-forge conda-pack
或者采用pip安装
pip install conda-pack
或者采用pip从git源码安装
pip install git+https://github.com/conda/conda-pack.git
Step2:将当前虚拟环境打包
conda-pack
ls
# env_name.tar.gz 即为打包完成的输出文件
conda deactivate
Step3:将example.tar.gz迁移到其他路径或其他机器
mv env_name.tar.gz ~/computer_two
Step4:在另一台机器上或是目录下解包
cd ~/computer_two/
# env_name.tar.gz 即为迁移过来的环境包
mkdir env_name
tar -xf env_name.tar.gz -C env_name
ls
# env_name.tar.gz env_name
Step5:激活虚拟环境
source env_name/bin/activate
#如果上面命令提示激活不成功,或报错
#报错信息 conda /activate: No such file or directory
#解决方法(参考:https://blog.csdn.net/u014636245/article/details/83933402)
conda activate env_name
#重新设置下~./bashrc里conda的路径
source ~/.bashrc
但我操作过程中遇到某些虚拟环境下没有conda-pack并且这个死活安装不上的情况。
然后我发动win系统下不打包直接移动文件夹的小心思,简单粗暴的解决了这个问题。
(设置conda虚拟环境亲测可以,但类似其他操作有风险,可能会有软件依赖的情况,需谨慎处理)
进阶方法二
直接将conda 1 的envs文件夹下你想要迁移的虚拟环境复制到conda 2 的envs文件夹下,然后更新下环境变量即可。
cp -r /conda01/envs/py35 /conda02/envs/
#刷新下环境变量
source ~/.bashrc (/conda02/bin)
#激活环境
source activate py35
#再次刷新下环境变量
source ~/.bashrc
此外,如果你想解决虚拟环境下某些安装包限制的问题,可以尝试修改Anaconda文件夹的权限和虚拟环境的权限来尝试解决,命令为chmod何chown。
另外,有另外一篇帖子ubuntu 安装两个Anaconda,并迁移虚拟环境写如何修改默认的conda环境,也可以参考一二。
如果有更好地方法解决这个问题,或是可以把其中的内在逻辑或原理讲的很清楚的大神,欢迎评论区或私信指点一二,不胜感激。