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

作者:xugaoxiang 时间:2021-03-29 23:02:58 

本文介绍一个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安装文件的其实操作就算完成了,如果出现其它问题请直接联系我们,更多关于这方面的相关知识请查看下面的相关链接

来源:https://xugaoxiang.com/2019/12/04/pyqt5-4-pyinstaller/

标签:python,pyinstaller,打包
0
投稿

猜你喜欢

  • python 随机打乱 图片和对应的标签方法

    2023-03-13 10:45:29
  • Python装饰器代码详解

    2021-04-28 23:16:03
  • 显示日期格式的几个函数

    2008-09-03 13:20:00
  • 不用加载Include文件也能生成选择列表吗?

    2009-10-29 12:30:00
  • python中numpy数组的csv文件写入与读取

    2021-11-26 06:18:20
  • Python 实现集合Set的示例

    2021-10-04 06:27:19
  • 详解Scrapy Redis入门实战

    2023-04-14 11:39:08
  • Python使用内置函数setattr设置对象的属性值

    2021-10-09 20:32:44
  • Django框架之中间件MiddleWare的实现

    2021-03-25 15:08:30
  • Python中栈的详细介绍

    2023-05-16 07:22:02
  • 备战618!用Python脚本帮你实现淘宝秒杀

    2022-05-15 04:43:40
  • 如何编制一个产生随机密码的函数?

    2009-11-08 19:06:00
  • python逐行读写txt文件的实例讲解

    2023-09-27 14:17:55
  • 基于Django框架的权限组件rbac实例讲解

    2022-09-27 17:11:51
  • PHP字符串前后字符或空格删除方法介绍

    2023-05-29 05:47:56
  • Python运行出现DeprecationWarning的问题及解决

    2022-01-14 05:26:23
  • python爬虫之爬取百度翻译

    2022-04-03 19:30:45
  • Python pyecharts绘制折线图详解

    2021-05-22 17:42:49
  • centos 安装python3.6环境并配置虚拟环境的详细教程

    2021-06-10 12:24:49
  • PaddleNLP ppdiffusers 自动生成兔了个兔海报

    2023-07-20 01:56:39
  • asp之家 网络编程 m.aspxhome.com