使用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以环状形式组合排列图片并输出的方法
Mar 17 Python
python将字典内容存入mysql实例代码
Jan 18 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
详解Python3序列赋值、序列解包
May 14 Python
Django组件cookie与session的具体使用
Jun 05 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python pycharm的安装及其使用
Oct 11 Python
django使用xadmin的全局配置详解
Nov 15 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
能让Python提速超40倍的神器Cython详解
Jun 24 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
php zend 相对路径问题
2009/01/12 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
python有证书的加密解密实现方法
2014/11/19 Python
python字符串替换的2种方法
2014/11/30 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
python编程实现归并排序
2017/04/14 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
python 消费 kafka 数据教程
2019/12/21 Python
shell的种类有哪些
2015/04/15 面试题
法学专业应届生求职信
2013/10/16 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
食品流通安全承诺书
2014/05/22 职场文书
法院授权委托书范文
2014/08/02 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
《认识年月日》教学反思
2016/02/19 职场文书