背景

脚本需要导入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,也就是说根本不需要自己麻烦的构建。。。

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

  1. python php linux-怎么在linux上运行python

    Linux默认是已经安装好了Python程序 目前来说,大多数的Linux发行版是安装了两个版本的Python程序 一个是Python 2.x 一个是Python 3.x 一些系统自带的程序文件需要P ...

  2. 树莓派能直接运行python程序_在树莓派上运行python脚本 - python

    我正在研究rapiberry pi 3大约3个月,开始使用它时遇到了问题. 我找不到在树莓派打开时在其上运行python脚本的有效,安全的方法(没有监视器,鼠标和键盘).此刻,我在/ etc / pr ...

  3. Nvidia GPU 入门教程之 03 在 GPU 上运行 Python 脚本,对比cpu与gpu性能,检测a100性能(教程含源码)

    GPU 的内核比 CPU 多,因此在数据的并行计算方面,GPU 的性能比 CPU 好得多,尽管 GPU 的时钟速度较低,并且与 CPU 相比缺乏几个内核管理功能. 因此,在 GPU 上运行 pytho ...

  4. windows上运行python脚本

    windows上运行python脚本 打开cmd CMD>path="解释器位置" --回车python运行脚本名.py或python绝对路径/运行脚本名.py 此处为 pa ...

  5. Pytorch踩坑记录:关于用net.eval()和with no grad装饰器计算结果不一样的问题

    Pytorch踩坑记录 相同点 net.eval()和with toch.no_grad()的相同点:都停止反向传播 不同点: 1.net.eval() 用net.eval(),此时BN层会用训练时的 ...

  6. python可以在linux运行_服务器(Linux)上运行python总结

    跑实验换了几次服务器了,每次遇到相似问题都要重新百度,而且每次百度搜索出的顺序都不一样,又得重新找半天,这次把遇到的问题都总结一下. 1.准备 PuTTY和FileZilla FileZilla使用F ...

  7. Linux定时运行Python脚本

    Linux–CentOS定时运行Python脚本 最近公司的项目开始进入运营阶段,数据库的记录也开始多了起来.看了postgresql的自动清理好像不太符合需求,暂定对接口请求记录表保留3个月内的记录 ...

  8. 数据标注平台(CVAT)安装及踩坑记录

    目录 一.CVAT安装 step1 安装docker step2 获取权限 step3 获取权限 step4 克隆cvat源代码 step5 构建docker镜像 step6 运行Docker容器这一 ...

  9. Anaconda3安装tensorflow踩坑记录

    Anaconda3安装tensorflow2.2踩坑记录 本次安装是在py版本为3.6的虚拟环境下安装: 首先激活环境 activate py36(name) activate py36 然后下载 p ...

最新文章

  1. 深度学习原来还可以这么学!
  2. jpgraph中文使用手册之文本和字体控制教程
  3. IPSEC传输模式和隧道模式的区别
  4. 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
  5. JS组件系列——开源免费图表组件:Chart.js
  6. 滴滴魅族手机人脸识别没有反应_手机UI颜值排名榜单,小米MIUI排到第九,魅族没有上榜...
  7. 硅谷程序员佛系养生法:我不修bug, 谁修bug
  8. java es 数据批量导入_ElasticSearch—Java批量导入导出
  9. Go语言实现文本文件拷贝
  10. 21个以Bootstrap为框架的WordPress免费主题模板下载
  11. esp32 esp8285 wf6000OTA升级小记
  12. cf两边黑屏怎么解决win10_电脑黑屏怎么解决
  13. WE出海增长图书馆 | 世界杯豪门面纱下,不容忽视的【增长】沃土
  14. java毕业设计_基于android的二手书城app的设计与实现
  15. 头条号发视频为什么没有收益,在头条号发搞笑视频收益大吗
  16. 综合型集团该如何利用数字化转型支撑磅礴多元的服务?
  17. pdcp层的作用_LTE系统中PDCP子层功能研究
  18. 杭电ACM基础题(2096、2097、2098、2099、2101、2103、2106、2107、2109、2113)
  19. 50 个让你高效编程的前端轮子
  20. centos8 安装oracle 11gR2

热门文章

  1. excel跨多个表格求和_看完财务同事用Excel函数完成的进销存报表,老板惊呆了...
  2. python-Matplotlib图形上添加箭头指示
  3. 7033: Lounge Lizards(lis)
  4. 计算机大专考试题,计算机大专考试试题一
  5. 每周一品 · 扬声器(喇叭)中的磁性材料
  6. 天津市儿童计算机编程课,天津2021少儿编程(少儿机器人编程是什么)
  7. 西瓜书.第五章(神经网络)重点最全整理+课后习题
  8. 2288H v5服务器恢复IBMC默认密码方法与步骤
  9. 基于树莓派的微型气象台
  10. 配置hadoop时,Linux主机名称不要带有下划线