python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件


Posted in Python onFebruary 26, 2020

本文介绍一个exe打包工具pyinstaller,使用非常简单、方便,而且还跨平台。

软硬件环境

  • Windows 10 64bit
  • PyQt5
  • Anaconda with python 3.6.5
  • pyinstaller
  • apscheduler
  • sqlalchemy

pyinstaller安装

命令行中执行

pip install pyinstaller

pyinstaller打包exe

示例还是以之前的为例,解压进入工程目录,命令行执行打包命令

pyinstaller -F --distpath release main.py

其中release是目标文件夹,main.py是工程入口文件,-F表示生成一个可执行文件。

python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

pyinstaller的打包参数很多,需要的话通过help来查看

pyinstaller -h

subprocess打包问题

在打包包含subprocess.Popen时发现,加上参数--noconsole时产生的exe文件在运行的时候,进程并没有正确运行。比如需要利用subprocess.Popen创建一个进程去执行一个命令行操作,

mProcess = subprocess.Popen(cmd,stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True)

pyinstaller打包操作命令如下

pyinstaller -F --noconsole --clean --distpath release main.py

打包后生成的exe,可以运行,不过查看进程并没有如预期正确地工作。

解决方法是在创建进程时,加上startupinfo参数,如下

si = subprocess.STARTUPINFO()

si.dwFlags |= subprocess.STARTF_USESHOWWINDOW

mProcess = subprocess.Popen(cmd,stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,universal_newlines=True,startupinfo=si)

问题完美解决,具体可以参考文末的资料

apscheduler打包问题

项目中用到了apscheduler这个库,用来做定时任务非常的好,使用也很简单,不过在pyinstaller打包的时候,出现了如下错误

python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

解决方法是,编辑文件/usr/local/lib/python3.5/dist-packages/apscheduler/__init__.py

# These will be removed in APScheduler 4.0.

# release = __import__('pkg_resources').get_distribution('APScheduler').version.split('-')[0]

# version_info = tuple(int(x) if x.isdigit() else x for x in release.split('.'))

# version = __version__ = '.'.join(str(x) for x in version_info[:3])

release = (3,3,1) 

version_info = '3.3.1' 

version = '3.3.1'

3.3.1是我安装的apscheduler的版本号,视实际情况修改。

接下来创建一个名称为hook-ctypes.macholib.py,内容如下

# -*- coding: utf-8 -*-

from PyInstaller.utils.hooks import copy_metadata

datas = copy_metadata('apscheduler')

最后执行打包命令

pyinstaller -F --clean --additional-hooks-dir hooks --distpath release main.py

sqlalchemy打包问题

在用pyinstaller打包一个使用了sqlalchemy库的python3工程中,碰到了打包后的可执行文件报错的问题,如下图所示

python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件

解决方案是,将sqlalchemy.dialects中的mysql引入,然后采用mysql+pymysql的方式打开数据库,代码如下

import pymysql

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.dialects import mysql

username = 'xugaoxiang'
passwd = '123456'
server = '192.168.0.100'
port = '3306'
dbname = 'djdb'

cmd_connect = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(username, passwd, server, port, dbname)

engine = create_engine(cmd_connect)

执行pyinstaller打包命令

pyinstaller -F --clean --distpath shark main.py

好了,至此pyinstaller打包python程序为exe安装文件的其实操作就算完成了,如果出现其它问题请直接联系我们,更多关于这方面的相关知识请查看下面的相关链接

Python 相关文章推荐
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
Python 调用 Windows API COM 新法
Aug 22 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
20行Python代码实现视频字符化功能
Apr 13 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
python 实现性别识别
Nov 21 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 #Python
python自动点赞功能的实现思路
Feb 26 #Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 #Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 #Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 #Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 #Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 #Python
You might like
PHP输出缓存ob系列函数详解
2014/03/11 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php利用事务处理转账问题
2015/04/22 PHP
定义select的边框颜色
2008/04/28 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
python logging类库使用例子
2014/11/22 Python
python搜索指定目录的方法
2015/04/29 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Atom的python插件和常用插件说明
2018/07/08 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
学校食堂标语
2014/10/06 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏