在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)

背景

脚本需要导入pytorch等库才能运行。
脚本在windows上运行成功,尝试放到linux上运行。
linux服务器内存较小。

方法一:在linux上安装依赖

把脚本放到linux上,直接安装依赖。
安装环境也有两种方法:一是先安装conda,再在里面安装环境;二是直接使用pip安装。
其实无论哪种方法,只要linux内存够,应该都是可以的。但我的问题就出在了内存上。

使用conda安装,报错:InvalidArchiveError。报错内容是conda缓存不足。

使用pip安装,进度条下载到一半,报错:killed。还是报的linux内存不足。

解决方法有几种:
1是使用--no-cache-dir参数
2是先下载轮子文件whl到本地再pip安装

具体可以参考这篇文章:https://blog.csdn.net/qq_39383591/article/details/121962775

在我尝试了几次下载失败后,我决定用回最开始使用的方法:即在windows打包好环境再放到linux中运行。

方法二:使用pyinstaller

在windows使用pyinstaller 打包好环境再放到linux中运行。

推荐先在conda中新建一个环境,再拉取环境依赖,否则使用当前环境打包,会导致打包后的文件过大:

>conda create --name sg3
>conda activate sg3
>conda env create -f environment.yml

第二次运行可以直接用生成的spec文件打包,节省时间

pyinstaller main.spec

问题一:exe运行报错:torch\lib\shm.dll
打包后找不到部分dll依赖项,相关issue:
https://github.com/pyinstaller/pyinstaller/issues/6960

看了一下,这个issue是最近出现的,pyinstaller的5.7版本应该是把这个问题修复了,于是我用pip list命令查看了本机的各个库版本,发现已经更新。我再去打包的环境里查看库版本,果然版本过低,需要升级。

在这里插入图片描述
使用命令升级:pip install --upgrade pyinstaller

问题二:conda报错:ValueError: check_hostname requires server_hostname
原因:开启了代理服务器,conda下载失败
解决:关闭代理服务器

问题三:conda报错:PackageNotInstalledError: Package is not installed in prefix
使用了错误的升级库命令:conda update pyinstaller
解决:使用正确命令pip install --upgrade pyinstaller

问题四:exe运行报错:ModuleNotFoundError: No module named 'scipy.signal'
我在github上找到了类似的issue:https://github.com/pyinstaller/pyinstaller/issues/3456
但也仅仅是相似,按开发者的说法,升级scipy的版本即可解决问题,但这并没有解决我的问题。

最后我选择在pyinstaller生成的spec文件中忽略掉这个包:
在这里插入图片描述
毫无疑问,去掉这个包之后,因为这个包丢失而导致的问题也出来了:
DLL load failed while importing _fblas
我在stackoverflow中找到了类似问题

方法三:使用docker镜像

理论上来说,docker镜像应该是最方便的方法,事实也确实如此。但由于脚本需要传参的关系,我错误的认为直接打包或复制文件即可在linux上运行,就没选docker这种方式。
在开始着手构建docker镜像的过程中,我还注意到了我拉取的github上的原项目就有dockerfile,也就是说根本不需要自己麻烦的构建。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值