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 Trie树实现字典排序
Mar 28 Python
分享Python文本生成二维码实例
Jan 06 Python
python中lambda()的用法
Nov 16 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
详解python播放音频的三种方法
Sep 23 Python
python 实现多线程下载视频的代码
Nov 15 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
python实现引用其他路径包里面的模块
Mar 09 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 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制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JQuery 学习技巧总结
2010/05/21 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python多进程写入同一文件的方法
2019/01/14 Python
python retrying模块的使用方法详解
2019/09/25 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
《七颗钻石》教学反思
2014/02/28 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
企业文化标语大全
2014/06/10 职场文书
倡议书的写法
2014/08/30 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
贪污检举信范文
2015/03/02 职场文书