前言

  第一次尝试用Pyinstaller打包Pytorch,碰见了很多问题,耗费了许多时间!想把这个过程中碰到的问题与解决方法记录一下,方便后来者。

基本流程

  使用Pyinstaller打包流程可分为以下三步:

  • 安装Pyinstaller,写个Hello world打包测试
  • 打包整个项目,在本机上调试生成exe
  • 将exe拷贝到新电脑上,测试和调试

一、安装Pyinstaller 和 测试Hello World

  使用Pycharm打开项目,点击Terminal,输入以下命令:

pip install pyinstaller

  请确保Terminal所在路径为项目根目录,以免在后续打包过程中找不到一些模块。图中红框内(pytorch)是我的项目所需要的虚拟环境。



  编写Hello World测试,新建test.py:

if __name__ == '__main__':
print("Hello World!")
while True:
pass

  在Terminal输入以下命令,打包test.py:

pyinstaller -F test.py

  回车运行,开始打包!在文件夹dist中找到test.exe程序,运行测试,没报错说明Pyinstaller安装成功。

二、打包整个项目,在本机上调试生成exe

  实际的项目一般是多文件,打包过程远比Hello World复杂多了。打包项目的核心要点有两个:

  • 配置好.spec文件
  • 补齐依赖项

  关于.spec文件配置详见参考链接一,这里不再赘述。需要注意的是,在测试阶段,打包时应设置为-D模式,方便补齐dll。本文重点讲dll及其依赖项的补齐。先安装必备工具Dependens,通过这个工具,我们可以得到.dll文件所需要的依赖项。在运行打包后的exe常常遇到以下的问题:



  这提示我们系统缺少caffe2_nvrtc.dll或其对应的依赖项。

  • 先到对应路径查看caffe2_nvrtc.dll是否存在
  • 若不存在,直接在Anaconda配置环境的文件夹搜索,一般都可以找到。将找到的caffe2_nvrtc.dll复制粘贴到根目录
  • 若存在,说明是缺少caffe2_nvrtc.dll的依赖项,使用Dependencies工具查看所需要的依赖项,后补齐到根目录

  Dependencies的使用非常简单,直接将.dll拖进去即可。这里以torch_python.dll举例

  可以发现,缺少若干个dll文件,补齐便可。通过上述方法,依样画葫芦,基本可以解决关于dll报错的问题。

  但每次重新打包后,需要手动复制粘贴dll文件,很是麻烦,通过配置.spec文件可简化操作。以记事本方式打开.spec,找到datas:



  小括号内有两个路径,第一个路径'kernel32.dll'表示原始数据路径,存放kernel32.dll的路径;第二路径为'.'表示目标路径,打包后原始数据存放的路径。意思就是将第一路径的东西在打包后,放在第二路径上。需要注意的是,这边我设置的是相对路径,相对于.spec中的pathex

三、在新电脑上测试

  我使用的是pytorch的GPU版本,在新电脑上运行发现会报如下错误,应该是缺少cuda库的缘故。



  我的解决办法简单粗暴,直接拷贝cuda包到移动硬盘

  每次到新的电脑,添加cuda到环境变量



  建议在程序额外设置一个选项,可将网络切换成CPU推理,以便在其他电脑测试时,即使环境未配置成功,也可通过CPU推理验证打包成功与否。最后,祝大家好运,打包成功那一刻是蛮喜悦的!

参考资料

Pyinstaller打包Pytorch框架所遇到的问题的更多相关文章

  1. win10环境下pyinstaller打包pytorch遇到的问题及解决方案

    pytorch-python源码生成windows的应用程序(.exe),报错OSError: could not get source code Failed to execute script h ...

  2. 用tkinter写出you-get下载器界面,并用pyinstaller打包成exe文件

    本文为原创文章,转载请标明出处 一.you-get介绍 you-get是一个基于 python 3 的下载工具,使用 you-get 可以很轻松的下载到网络上的视频.图片及音乐.目前支持网易云音乐.A ...

  3. pyinstaller打包的exe太大?你需要嵌入式python玄学 探索篇

    上篇我们讲到pip的安装以及普通库用pip的安装方法 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 拓展篇​zhuanlan.zhihu.com 问题纷沓而 ...

  4. 预测球队比赛结果及利用pyinstaller打包文件

    一.预测乒乓球球队比赛成绩 1.乒乓球比赛规则 一局比赛:在一局比赛中,先得11分的一方为胜方:10平后,先多得2分的一方为胜方. 一场比赛:单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜 ...

  5. python3使用pyinstaller打包apscheduler出的错

    本来只是想用Python做一个定时任务小工具在服务器上运行,可是服务器在隔离区,各种禁止上外网,使用pip导出列表那种下载库的方法不管用,导致Python的各种库都下不到,官网离线下载又各种缺依赖,好 ...

  6. PyInstaller打包步骤简记

    pyinstaller 下载地址:http://www.pyinstaller.org/ 下载后用cmd进入解压文件夹 python setup.py install 安装. 最近用pyinstall ...

  7. pyinstaller打包第一个wxPython程序HelloWorld

    pyinstaller 打包hello 7Mb ================= www.pyinstaller.org pip install pypiwin32 pip install pyin ...

  8. [python学习笔记] pyinstaller打包pyqt5程序无法运行

    问题 pyinstaller打包的pyqt5程序在部分电脑上会失败.用户截图提示下边错误日志 无法定位程序输入点 ucrtbase.terminate 于动态链接库 api-ms-win-crt-ru ...

  9. pyinstaller 打包生成exe之后运行提示‘no module name 'xxx'’错误

    python 3.7 pyinstaller 3.4 具体情况: pycharm中点击运行可成功执行,生成正确结果,没有报错. 双击run.py(程序运行的主文件),运行,可生成正确结果,没有报错. ...

随机推荐

  1. P2678 [NOIP2015 提高组] 跳石头

    #include<bits/stdc++.h> using namespace std; int l,n,m,a[100010];//与起点的距离 bool check(int d) { ...

  2. 作业2.7_3(给UVA548 树 Tree单独一个帖子)🍺

    代码:(输入函数很香建议保留)我不理解他是绿的但 The Blocks Problem 是黄的 #include<bits/stdc++.h> using namespace std; i ...

  3. HTTP协议和HTTPS协议的那些事

    文章目录 HTTPS VS HTTP HTTPS=HTTP+加密+证书+完整性保护 加密 对称加密 非对称加密 混合加密 证书 完整性保护 HTTPS并不能取代HTTP SSL是把双刃剑 HTTPS的 ...

  4. Linux之history使用技巧

    背景: 正常情况下,Linux系统中输入 history  只显示序号和历史命令如下图,但是当我们想要根据历史命令来排查一些故障问题时,无法精确获取该命令执行的详细信息,包括执行时间.执行的用户.是哪 ...

  5. [题解]第十一届北航程序设计竞赛预赛——A.模式

    题目描述 输入一个学号,判断是计算机系or软件学院or其他院系. 解题思路 水题,直接判断or除以10000都可以.不废话,直接上代码. 1 #include <iostream> 2 # ...

  6. 3款自助型BI分析平台功能盘点,帮助你预测商业发展方向

    在快速发展的今天,商业智能BI已经不同于传统的商业智能BI,商业智能BI已经逐渐转变为自助和业务主导的模式,自助BI分析平台应运而生,自助BI分析平台逐渐成为许多企业的选择. 自助式BI分析平台与传统 ...

  7. 哪些BI分析商业智能平台是最受欢迎的?

    近些年来,AI推动的云生态系统已非常成熟.智能.增强的预测和决策工具处于这样一个阶段:准备好部署到企业中从董事会到车间的各个地方.挑战在于确保贵企业已准备好使用它们.因此,下面介绍了眼下最出色.最受欢 ...

  8. 目前市面上报表软件下载排名的TOP5

    目前,大部分的工作仍然离不开表格,而且工作表格的呈现更酷.效率要求更高.可以简化复杂的操作,大大提高工作效率.在企业管理中,报表可以以图表等简洁的方式向用户显示数据,从而提高工作效率.许多哦公司紧跟信 ...

  9. yum报错 , yum相关配置信息,yum重装

    docker源的问题 yum有很多错,比如网络问题,dns问题,timeout 错,还有不知道什么错误 网上有很多,网络问题,dns问题,但是我ping www.baidu.com通,所以不是这个问题 ...

  10. 什么是NFT?

    我有一个年轻朋友,最近买了一个数字艺术品,9百多入手,几周后卖掉,赚了7万多,他告诉我这个东西叫NFT. 2021年twitter创始人杰克.多西将自己发布的第一条twitter通过NFT以250万美 ...