linux上迁移python虚拟环境

BERT验证

由于某些需要,目前需要把BERT在GLUE数据集上实现一下验证,在github上down了一份BERT的代码,里面是直接给好了验证代码的(run_classifier.py)只需要按照requirement.txt安装一下tensorflow1.x就可以开始测试了

首先肯定是在本机上运行测试一下代码是否有坑,于是马上上手做,下载model,下载数据集,建立虚拟环境,装包等一系列操作,另外参考这位大佬的CSDN文章编写了一个自己的测试类,如果除去下载过程中遇到的奇怪问题,在本机上还算是比较顺利,很快代码就能运行了,我很开心,电脑主机应该也很开心,我听它的风扇声音一直都没停。我想了想,既然能跑,代码是某门忒的,好!开始上服务器吧!!!

这真就开始了心酸历程

首先最主要的问题是,实验室的服务器它断网了。。。

好吧,既然没法用pip,那我开始寻找python虚拟环境迁移的资料,这真是不找不知道,一找吓一跳,网上关于环境迁移的资料好少哦,还有好多不良网站剽窃别人的原文,看起来好像很多,点开看到图片加载不出的看过的原文。。。哼哼有点恶心人。。。这还不是最误人子弟的,网上的方法很多都有问题,,害本傻蛋踩了好多的坑。。。

首先,我图方便按照网上的教程,在自己的linux服务器上装好了一个虚拟环境,然后直接把venv打包下载再上传服务器,解压后将bin目录下的activate中环境的路径改掉,然后用source bin/activate激活。欸嘿成功进入虚拟环境,BUT,这种方法事后想想肯定是不行的,先不论安装好的包是否能直接迁移,就说bin目录下,就有不止一个文件包含环境的绝对路径。

好的,这种方法失败 当我真正意识到这种方法不行的时候。。。已经废了很久的时间了 哭了

中间还穿插各种小问题,想想真是辛酸泪

下面就讲讲该怎么往不联网的服务器上迁移python环境

python虚拟环境迁移

由于我拿到的linux服务器只有py2.x,又不能联网,所以首先需要在一台linux服务器建一个py3的虚拟环境

conda create env -n bert-env python=3.6

然后把bert-env打包下载之后传到服务器

注意批量修改一下bin目录下的文中中的环境路径

我这边是这样改,把root更换为home/yxr065

sed -i "s/root/home\/yxr065/g" `grep root -rl ./`

之后返回自己的linux服务器,重装一个虚拟环境,最好也测试一下代码能不能运行,(我第一次测试是在windows上做的),然后用下面命令:

pip freeze --all > requirements.txt

把需要的包集成到requirements中,然后把包的whl文件下载下来

mkdir whl
cd whl
pip download -r requirements.txt

做到这一步,算是成功了一小半

然后把reuquirement放到whl文件夹,之后打包,再上传到服务器,激活虚拟环境,开始装包

source bert-venv/bin/activate

进入whl文件夹

pip install -r requirements.txt --no-index -f ./

这个时候可能还是会有问题,大概会报以下的错误:

xxx.whl is not a supported wheel on this platform

这是由于python版本与whl包不匹配,首先你要知道目前的环境适配何种后缀的包,查询命令由于pip版本的不同有所不同:推荐文章:https://blog.csdn.net/sinat_26811377/article/details/99947448

比如说我这边pip21.3用命令pip debug --verbose就可以看到

cp36-cp36m-manylinux_2_17_x86_64
cp36-cp36m-manylinux2014_x86_64
cp36-cp36m-manylinux_2_16_x86_64
cp36-cp36m-manylinux_2_15_x86_64
cp36-cp36m-manylinux_2_14_x86_64
cp36-cp36m-manylinux_2_13_x86_64
cp36-cp36m-manylinux_2_12_x86_64
cp36-cp36m-manylinux2010_x86_64
cp36-cp36m-manylinux_2_11_x86_64
cp36-cp36m-manylinux_2_10_x86_64。。。。。。

然后上华为的镜像网站

修改后面simple的标签,寻找自己想要的包,再ctrl+F筛选适合自己的包下载再上传

循环这个操作,直到不再报错。

最后的小提醒

如果数据量比较大,模型比较复杂,在服务器上跑的时候记得把进程加入后台

nohup sh train.sh  >  out.file  2>&1  &

sh train.sh是我的进程,记得修改成你自己的哦

最后最后,祝天下所有服务器都可以联网。。pip大法好

你可能感兴趣的:(Linux,linux,python,服务器)