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九九乘法表的实例
Sep 26 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
Python找出最小的K个数实例代码
Jan 04 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
python学生信息管理系统(初级版)
Oct 17 Python
Python根据成绩分析系统浅析
Feb 11 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 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
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
ThinkPHP模型详解
2015/07/27 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
多种方法实现JS动态添加事件
2013/11/01 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
json的使用小结
2016/06/08 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
用Python写一个自动木马程序
2019/09/17 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
心理健康教育制度
2014/01/27 职场文书
初二物理教学反思
2014/01/29 职场文书
音乐教学案例
2014/01/30 职场文书
标准毕业生自荐信
2014/06/24 职场文书
国企干部对照检查材料
2014/08/22 职场文书
课外活动实习计划
2015/01/19 职场文书
办公室主任个人总结
2015/02/28 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js