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

前言

将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位

总结

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

您可能感兴趣的文章:

  • 使用PyInstaller将Python程序文件转换为可执行程序文件
  • 利用pyinstaller或virtualenv将python程序打包详解
  • 利用PyInstaller将python程序.py转为.exe的方法详解
(0)

相关推荐

  • 使用PyInstaller将Python程序文件转换为可执行程序文件

    Windows下采用PyInstall将py文件转换成exe可执行文件 好不容易写完的py文件,想做成exe文件,最开始选择用py2exe,结果生成的exe遇到两个问题, 1. py程序里print 的信息,cmd中执行tool后并没有显示在屏幕上: 2. 调用dll接口,执行py文件时是阻塞等待的,结果cmd中执行exe时,tool很快先返回了,接口还在运行,很诡异 一时找不到解决的办法,无奈弃用了,在网上找了pyinstall,试了一下,感觉功能更强大些... 安装PyInstaller之前

  • 利用pyinstaller或virtualenv将python程序打包详解

    运行环境: CentOS6.5_x64 Python版本 : 2.6 使用pyinstaller打包 pyinstaller可以将python程序打包成二进制文件,打包后的文件在没有python的环境中也可以执行(但要有相关底层libc相关so文件).pyinstaller支持将python程序打包成单个文件,它所做的只是将文本转换成二进制,并不能给python提速,相反还会影响打包后程序的运行速度. 安装pyinstaller 官方网址:http://www.pyinstaller.org/

  • 利用PyInstaller将python程序.py转为.exe的方法详解

    前言 最近经常用到一个.py程序,但是每次在不同电脑上用,希望能把Python脚本发布为脱离Python平台运行的可执行程序,比如单个exe.PyInstalle满足要求. PyInstaller本身并不属于Python包.在安装 pyinstaller之前需把python环境配置好. 安装pyinstaller 下载pyinstaller 解压到F:\PyInstaller-2.1(自选)(可以去官网下载最新版) 安装pywin32 pywin32-217.win32-py2.7.exe:点击

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

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

  • Go使用proto3的踩坑实战记录

    开发环境:windows10,golang1.18.2,goland2022.2 最近在写项目时,一些数据类的结构以protobuf文件给定.因此,需要将这些protobuf文件转换为golang代码. 首先,在下载解析protobuf的包的时候就碰到了第一个问题... go get -u github.com/golang/protobuf/protoc-gen-go 在我用上述命令后,终端提示该包已弃用 go: module github.com/golang/protobuf is dep

  • nginx反向代理踩坑实战记录(容器方式)

    目录 一.简述 1.1 什么是反向代理? 1.2 看图理解 1.3 错误总结 二.正确案例 2.1 启动nginx 2.3 配置nginx 2.4 重启所有服务 2.5 测试 三.云服务器上跑的nginx怎么代理本地项目 总结 一.简述 1.1 什么是反向代理? 这很重要,反向代理就是代理服务器代理真实服务器.客户端以为代理服务器就是真实服务器,所以就会把要请求的==资源(URL)==发给代理服务器. 代理服务器一般是由nginx来充当,代理功能由配置文件来完成. 1.2 看图理解 画的仓促,大

  • 一次mysql迁移的方案与踩坑实战记录

    目录 背景 方案一:老数据备份 方案二:分表 方案三:迁移至tidb 重点说下同步老数据遇到的坑 最终同步脚本方案 总结 背景 由于历史业务数据采用mysql来存储的,其中有一张操作记录表video_log,每当用户创建.更新或者审核人员审核的时候,对应的video_log就会加一条日志,这个log表只有insert,可想而知,1个video对应多条log,一天10w video,平均统计一个video对应5条log,那么一天50w的log, 一个月50 * 30 = 1500w条记录, 一年就

  • springboot整合log4j的踩坑实战记录

    目录 1.依赖添加 1.1.添加依赖 1.2.剔除依赖 2.配置日志 2.1.日志打印记录 2.2.指定配置文件 补充:log4j调优和注意事项 总结 1.依赖添加 1.1.添加依赖 需要引入 log4j 的依赖支持,推荐自己确定使用的版本. <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <ve

  • vue3搭配pinia的踩坑实战记录

    目录 前言 An Object could not be cloned? VUE 3的toRaw PINIA与VUE 3可以混合搭配? 同样的操作在VUE 3下的结果 最后的解决方式 总结 前言 最近接手了一个新项目,用的是VUE3+pinia的组合.由于之前没有用过这2个库,只能现学现做.幸运的是这两者的上手难度都不大,项目可以正常开发.但这其中也遇到了一些坑,今天就来讲其中我印象最深的一个. An Object could not be cloned? 不知道有多少开发者遇到过这个报错——A

  • Android录音功能的实现以及踩坑实战记录

    目录 前言 前提 : 代码实现流程 : 踩坑 1.Android Q: 2.RuntimeException:setAudioSource failed 3.MediaRecorder: stop failed 总结 前言 最近接到个需求,不使用第三方SDK的情况下实现IM通讯,文字聊天已经通过MQTT实现,而语音功能目前想到的较好解决方案就是进行录音文件的上传下载.可能还有更好解决方案,但我目前没想到,有建议的小伙伴劳烦指导下. 前提 : 1.权限申请: 清单文件中加上: <uses-perm

  • Java切割字符串的踩坑实战记录

    目录 坑出现的环境 问题的解决 补充:java分割字符串常见语法 一.java.lang.String.split() 二.java.util.StringTokenizer() 总结 坑出现的环境 一般情况下切割字符串会使用split或者StringTokenizer,如下代码 String s = ",,o,,"; String[] split = s.split(","); 期望得到数组["","","o&qu

  • C++踩坑实战之构造和析构函数

    目录 前言 构造函数 通过构造函数实现的类型转换 派生类的构造函数 析构函数 继承中的析构函数 应用 总结 前言 我是练习时长一年的 C++ 个人练习生,喜欢野指针.模板报错和未定义行为(undefined behavior).之前在写设计模式的『工厂模式』时,一脚踩到了构造.继承和 new 组合起来的坑,现在也有时间来整理一下了. 构造函数 众所周知:在创建对象时,防止有些成员没有被初始化导致不必要的错误,在创建对象的时候自动调用构造函数(无声明类型),完成成员的初始化.即: Class c

  • Python 3.x踩坑实战汇总

    目录 纪要 处处有坑 1. 文件读取 open 2. 正则表达式 \S 与 \\S 3. 正则表达式匹配方法 match 4. 帮助文档 pydoc 5. 字符串 encode base64 编码 6. Python 调用 C# 动态链接库 总结 纪要 本文用于记录学习 Python 过程中遇到的一些小问题,如果遇到的是比较大的问题会单独开页面分析学习 处处有坑 1. 文件读取 open # 我们打开文件使用 open 方法 xml = open("demo.xml") # 使用 op

随机推荐