使用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 爬虫学习笔记之单线程爬虫
Sep 21 Python
python连接mysql实例分享
Oct 09 Python
python实现多张图片拼接成大图
Jan 15 Python
详解重置Django migration的常见方式
Feb 15 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
Python用户自定义异常的实现
Dec 25 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
2006/12/23 PHP
php实现网站插件机制的方法
2009/11/10 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
javascript计时器编写过程与实现方法
2016/02/29 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
趣味运动会策划方案
2014/06/02 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
旅游项目合作意向书
2015/05/08 职场文书
小学运动会加油稿
2015/07/22 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python