使用Pyinstaller的最新踩坑实战记录


Posted in Python onNovember 08, 2017

前言

将py编译成可执行文件需要使用PyInstaller,之前给大家介绍了关于利用PyInstaller将python程序.py转为.exe的方法,在开始本文之前推荐大家可以先看下这篇文章,本文主要给大家介绍了Pyinstaller最新踩坑实战记录,现在网上关于pyinstaller的问题充斥着各种copy过来copy过去的答案,这大概就是各种无脑博客爬虫站最让人讨厌的地方。
而且这方面的问题,stackoverflow也是回答的千奇百怪。

强烈推荐官方文档 http://pythonhosted.org/PyInstaller/usage.html#options

引言

这里记录下我的两个踩坑解决方法,第一个其实网上有人写出来过,但是太容易被各种噪声淹没了。第二个则是摸索了一下午自己找到的解决方法。

一、PYTHON2X.DLL缺失

先声明环境

Windows10+python2.7.11 64bit+pyqt4 64bit+pyinstaller3.2解决

网上遇见这种错误基本有这几种:

  • 手动寻找.dll文件并移到对应文件夹下,网上被流传最广的做法,我测试后无效
  • 修改SPEC文件,添加各种路径,这种手动添加路径的方法也着实令人头疼
  • 编译时,使用-path参数等,也是需要手动添加路径

其实,官方文档里给出了一个参数

--win-private-assemblies

这个参数是指将共享的程序集变为私有程序集,这样的话即使改变环境,编译的程序依然只会执行私有程序集而忽视不同环境下的共享程序集。这个参数尤其适合在一台机器上编译完成后在各种不同环境下执行。

与之相近的还有一个参数

--win-no-prefer-redirects

这两个参数是在比较新的pyinstaller版本中才有的选项,所以爬虫站点copy的老博客自然不会介绍这类方法。

二、WINDOWS2003 32BIT提示程序无效

环境如下:

Windows2k3 32bit+python 2.7.11 32bit+pyqt 32bit+pyinstaller2.1解决

其实就是有一个需求是在32位的win2003上执行打包后的pyqt。

最初是安装了最新版的一套32位python+pyqt+pyinstaller在32位的win7上编译执行成功了,但是把已经是32位的程序放到2003上却报错说是无效的win32程序。一开始怀疑2003和win7的32位难道还不一样?

结果一套最新程序在win2003上编译完还是报了同样的错。

搜索无果后,偶然看到一个帖子,是说PHP5.5不支持Win2003,在运行时就会报无效的win32程序这个错,恍然想到会不会是编译用到的哪个组件同样不支持Win2003了呢?

原本未打包的程序在2003上可以执行,那么多半是pyinstaller的问题,直接将pyinstaller回退到仍然在官方列表里的最老版本2.1,发现也只有2.1还支持python2.6以下的版本,打包成功不在报错。

但是这里又有一点小问题,打包的pyqt程序点击后没有任何效果,这次怀疑是参数问题,测试后发现,首先,老版本的pyinstaller没有我之前说的那两个改变程序集的命令;其次,如果使用-w去掉了命令行框的话,pyqt也没有办法执行起来,因此最后只使用-F ?clean两个参数来打包,测试后文件可以执行。

其他

其实还有些小问题,但是这些问题答案都好找,就不在这里详细讲了。

  • pywin32官网上很好下到对应版本
  • 直接的pyqt安装包官网不再提供了,可以去sourceforge下到
  • 编译的时候报VC的错,安装Microsoft Visual C++ 20xx Redistributable Package,注意32位和64位

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python 不同对象比较大小示例探讨
Aug 21 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
django-初始配置(纯手写)详解
Jul 30 Python
django之自定义软删除Model的方法
Aug 14 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
Django多个app urls配置代码实例
Nov 26 Python
python识别围棋定位棋盘位置
Jul 26 Python
python的变量与赋值详细分析
Nov 08 #Python
浅谈python迭代器
Nov 08 #Python
python生成excel的实例代码
Nov 08 #Python
Python 多核并行计算的示例代码
Nov 07 #Python
python判断字符串是否是json格式方法分享
Nov 07 #Python
python好玩的项目—色情图片识别代码分享
Nov 07 #Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 #Python
You might like
完美解决PHP中文乱码
2009/11/26 PHP
php curl基本操作详解
2013/07/23 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
python如何修改文件时间属性
2021/02/05 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
《数星星的孩子》教学反思
2014/04/11 职场文书
一岗双责责任书
2014/04/15 职场文书
商场促销活动策划方案
2014/08/18 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL