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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
python实现的登录和操作开心网脚本分享
Jul 09 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
Python学生成绩管理系统简洁版
Apr 05 Python
代码分析Python地图坐标转换
Feb 08 Python
python调用百度语音REST API
Aug 30 Python
python中退出多层循环的方法
Nov 27 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
python可视化大屏库big_screen示例详解
Nov 23 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
Javascript 中的 && 和 || 使用小结
2010/04/25 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
社会实践活动总结报告
2014/04/29 职场文书
学生检讨书怎么写
2014/10/09 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
关于迟到的检讨书
2015/05/06 职场文书
春节慰问简报
2015/07/21 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技