PyInstaller天坑终极攻略

PyInstaller莫名报错?面对错误信息无从下手?翻遍全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目

大佬别走!我这里有:

  1. PyInstaller打包失败后的python打包exe攻略
  2. 便携式python的制作方法
  3. 便携式python安装pip攻略
  4. PyQt5运行时少这少那
  5. 使用QWebEngineView后缺失文件无法运行
  6. 便携式python运行PyQt5出现复古老界面

以上这些你想要的答案这里都有,请慢慢享用或直接查询所需

求赞,求关注,求收藏!

盘点PyInstaller的坑




等等等,代码写的多了错误也就不胜其数了,好了我就就不戳大家心窝子了,下面开始我们的正题

讲解案例:

使用PyQt5,QWebEngineView,jinja2,markdown2等库的一个项目打包exe

虽然我已经不想再提PyInstaller使用过程中遇到的错误了,但是不巧我们的案例讲解也是由一个错误开始的

Traceback (most recent call last):File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 329, in get_module_attributereturn _get_module_attribute(module_name, attr_name)File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_parent.py", line 269, in wrappedreturn call(function, *args, **kwargs)File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_parent.py", line 238, in callreturn isolated.call(function, *args, **kwargs)File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_parent.py", line 176, in callraise RuntimeError(f"Child process call to {function.__name__}() failed with:\n" + output)
RuntimeError: Child process call to _get_module_attribute() failed with:File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_child.py", line 63, in run_next_commandoutput = function(*args, **kwargs)File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 325, in _get_module_attributereturn getattr(module, attr_name)
AttributeError: module 'markdown' has no attribute '__version__'The above exception was the direct cause of the following exception:Traceback (most recent call last):File "D:\program\python\Python3.7.9\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)File "D:\program\python\Python3.7.9\lib\runpy.py", line 85, in _run_codeexec(code, run_globals)File "E:\notebook\venv\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>File "E:\notebook\venv\lib\site-packages\PyInstaller\__main__.py", line 178, in runrun_build(pyi_config, spec_file, **vars(args))File "E:\notebook\venv\lib\site-packages\PyInstaller\__main__.py", line 59, in run_buildPyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 934, in mainbuild(specfile, distpath, workpath, clean_build)File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 856, in buildexec(code, spec_namespace)File "E:\notebook\main.spec", line 20, in <module>noarchive=False,File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 381, in __init__self.__postinit__()File "E:\notebook\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 173, in __postinit__self.assemble()File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 550, in assembleFile "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removedFile "E:\notebook\venv\lib\site-packages\_pyinstaller_hooks_contrib\hooks\stdhooks\hook-markdown.py", line 23, in <module>if is_module_satisfies("markdown >= 3.3"):File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 487, in is_module_satisfiesversion = get_module_attribute(module_name, version_attr)File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 331, in get_module_attributeraise AttributeError(f"Failed to retrieve attribute {attr_name} from module {module_name}") from e
AttributeError: Failed to retrieve attribute __version__ from module markdown

说,这么长的东东有没有吓到你,
哎,面对它我们怎么办呢?解决是不可能解决的,额也可能是我菜,到现在也没搞明白~~
莫名其怪,明明码代码的时候运行的好好地就是打包不了,我们只能自己手动打包了.

思路: 将python解释器制作成便携版 然后加入我们的项目 最后补一个exe运行入口好了

便携版python制作

  1. 去python官网下载压缩包的python到本地解压(这里我用https://www.python.org/ftp/python/3.7.9/python-3.7.9-embed-amd64.zip)
  2. 下载get-pip.py文件(https://bootstrap.pypa.io/get-pip.py)
    3.运行get-pip.py文件


注意:使用时python要写类似c:\user\python.exe这样具体地址

4.设置python自动寻找pip
找到和python.exe同目录下的python37._pth打开(具体看个人python情况)
去掉 import site 前的注释符号


注意:在执行pip 命令时要用 python -m pip

到此为止我们的便携式Python就完成了,接下来就是复制我们项目的时候了克隆包拷贝文件走一波

再把项目文件统统拷贝到python.exe同名目录,大功告成,别高兴的太早,转头运行,不说也罢

接下来处理PyQt5运行时文件找不到的情况

首先 Qt所需要的东西不在环境变量中找不到
qt.qpa.plugin: Could not find the Qt platform plugin “windows” in “”
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

当然网上最简单的方案是

找到python的路径,点击 \Lib\site-packages\PyQt5\Qt5\plugins\platforms
将该路径添加到环境变量中,变量名设为QT_QPA_PLATFORM_PLUGIN_PATH

不过俺是要发布软件给别人用啊,让人家去配环境变量?显然…

那么我的选择是

复制PyQt5\Qt\plugins下下的所有内容复制到到python.exe同目录下

别急,这时我运行,what?我电脑win11啊,怎么成xp界面了,

每错,在某些情况下,如在精简环境下的python程序打包中(我们用的就是便携版python),执行打包后的程序会出现窗体风格变为老式的win风格,这是由于打包时候PyQt的styles动态库没有找到。

因此只需要在Python 目录下找到 Lib\site-packages\PyQt5\Qt\plugins\styles,将styles整个目录复制到python.exe同层目录

最后又又又出现了Could not find QtWebEngineProcess.exe错误,相信看到这儿小伙伴们也和我一样心力憔悴

别慌

将PyQt5/Qt/bin(dist目录下也有)目录下的QtWebEngineProcess.exe和PyQt5/Qt/resource目录下的所有文件复制到dist目录下,解决问题。

这次运行 …/python.exe main.py 成功跑起
晒一张我当时的截图,看到这一幕我高兴的哭了

当然现在还仅仅是运行起来的,不要指望所有人都会像程序员一样老老实实敲
/python.exe main.py 我们还需要一个小小的脚本

from os import path
import sys
from win32api import ShellExecute
dirname = path.dirname(path.realpath(sys.argv[0]))
ShellExecute(0, 'open', path.join(dirname,'pythonw.exe'), path.join(dirname,'main.py'),dirname,1)# 第一个路径指定python.exe 第二个指定程序入口main.py 第三个路径是开始路径,相当于从D:\\users\\Desktop\\新建文件夹开始运行程序 , 这样能保证路径名不出现问题

之后,这里用了pythonw来调用,嗯毕竟论谁辛辛苦苦画的漂亮界面也不想看到一个黑框框出来扫兴.
还有获取py文件目录就用上面那个,其他不行,这就不得不说PyInstaller打包后exe运行问题了,它是解压到零时目录下运行的,其他语句得不到想要结果,路径会出错
最后我整个项目做出来大概600MB,大是大了点不过python就这样,在加上咱们没有压缩很正常.

终于完了,哦对了上述代码可以用PyInstaller打包个exe放python.exe目录下调用,那么短一个程序也不用怕出啥幺蛾子了

求点赞,求收藏,求关注

致谢:(是你们指引我走过了那段迷茫的时光~~~)

  1. pyinstaller 打包出现几类错误的一般解决方法(https://blog.csdn.net/qq_44703886/article/details/109763756)
  2. Windows下制作Python便携版(带pip)–Portable Python(https://blog.csdn.net/lizongti/article/details/123142634)
  3. Pyinstaller 打包发布经验总结(https://blog.csdn.net/weixin_42052836/article/details/82315118)
  4. 【Pyinstaller】打包并运行时报错:Could not find QtWebEngineProcess.exe的解决(https://blog.csdn.net/xhltk316/article/details/120283750)
  5. Pyinstaller路径问题,pycharm,exe,双用(https://www.cnblogs.com/jackadam/p/15837102.html)

PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)相关推荐

  1. 使用ANT编译项目报错 com.sun.image.codec.jpeg does not exist 解决方法

    使用ANT编译项目报错 com.sun.image.codec.jpeg does not exist 解决方法 参考文章: (1)使用ANT编译项目报错 com.sun.image.codec.jp ...

  2. Hive 启动报错java.net.URISyntaxException: Relative path in absolute URI 解决方法

    linux安装hive 遇到问题:Hive 启动报错java.net.URISyntaxException: Relative path in absolute URI 解决方法 方法记录 提示:这里 ...

  3. 【报错】node:internal/modules/cjs/loader:936 【解决方法】

    1.报错问题 执行完 npm install 之后执行  npm start 时,会显示code: 'MODULE_NOT_FOUND'  Error: Cannot find module '~\h ...

  4. svn update 报错,必须先cleanup,然后cleanup失败解决方法

    svn update 报错,必须先cleanup,然后cleanup失败解决方法 参考文章: (1)svn update 报错,必须先cleanup,然后cleanup失败解决方法 (2)https: ...

  5. 安装linux 系统报错:No DEFAULT or UI configuration directive found 解决方法

    安装linux 系统报错:No DEFAULT or UI configuration directive found 解决方法 参考文章: (1)安装linux 系统报错:No DEFAULT or ...

  6. 【pycharm】pycharm上安装tensorflow,报错:AttributeError: module ‘pip‘ has no attribute ‘main‘ 解决方法

    [pycharm]pycharm上安装tensorflow,报错:AttributeError: module 'pip' has no attribute 'main' 解决方法 参考文章: (1) ...

  7. mycat重启报错Failed to connect to the Wrapper at port解决方法

    mycat重启报错Failed to connect to the Wrapper at port解决方法 参考文章: (1)mycat重启报错Failed to connect to the Wra ...

  8. maven文件报错(pom.xml或者jar包缺失)解决方法

    maven文件报错(pom.xml或者jar包缺失)解决方法 参考文章: (1)maven文件报错(pom.xml或者jar包缺失)解决方法 (2)https://www.cnblogs.com/wa ...

  9. 报错:Parameter ‘XXX‘ implicitly has an ‘any‘ type.解决方法

    报错:Parameter 'XXX' implicitly has an 'any' type.解决方法 tsconfig.json添加"noImplicitAny": false ...

最新文章

  1. pythorch学习笔记
  2. 统计apache404错误ip并加入iptables防火墙
  3. Spring+Hibernate配置多数据源
  4. Oracle执行外部文件:
  5. Python学习 Day 1-简介 安装 Hello world
  6. HttpClient下载
  7. Win10系统U盘启动盘制作详解
  8. anaconda配置清华镜像源
  9. 滴滴出行怎么下载丨办法总比困难多
  10. 流利说英语level4_流利说 懂你英语 level4 unit1 part1
  11. xmind贴纸_如何使用彩色背景或大贴纸创建Facebook状态
  12. FITURE 、百度、咕咚“围猎”智能健身镜
  13. 查询薪金比“SMITH”或者“ALLEN”多的所有员工的编号、姓名、部门名称、领导姓名、部门人数、平均工资、最高及最低工资
  14. android模拟器启动boss,传说之下boss模拟器无敌版
  15. 给一个IP地址,如何划分为几个子网?
  16. cad墙线打断lisp_CAD绘制墙体时,不打断模式有什么好处?
  17. Go语言结构体指针为nil时的小坑
  18. 亚马逊真的是让我又爱又恨
  19. Sentence-BERT论文阅读笔记
  20. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

热门文章

  1. 2023最新独立后台茶杯狐影视网站PHP系统源码+大气UI高级
  2. 广告屏蔽软件Adblock Plus下载量近10亿
  3. Spring框架之AOP
  4. idea实现静态资源部署
  5. Premature end of file
  6. HDU 5172 GTY's gay friends 线段树+前缀和+全排列
  7. 小 X 与机器人 (betago)
  8. Java序列化工具的对比
  9. 基于最小错误概率与最小风险的贝叶斯决策
  10. 温州医科大学oracle期末试题,关于加强试卷库试题库建设的通知