使用pyinstaller打包tkinter程序

主要问题:

(1)如何同时打包多个python文件

(2)打包过程中有缺失的包怎么处理

(3)如何解决打包程序过大的问题

       以上三个问题是使用pyinstaller打包python文件常见的问题,我将以自己开发的一个tkinter程序来进行说明,所有操作与结果自己已经验证。

提示:如果不考虑打包程序大小的问题,可能会出现一个打包的exe程序好几百兆,甚至更大,这不仅占用资源,启动速度也比较慢,所以最好是重新创建一个比较干净的python环境要好一些。

一、创建干净的python运行环境

1、创建一个新的环境

  conda create -p PATH -n ENVIRONMENT python=3.10.11

2、安装需要的包

推荐使用pip安装,因为使用conda安装会安装很多其他相关的包,但是考虑到pip下载库很慢,可以在 pip 时加上镜像源的地址:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 需要安装的包的名称

 3、在当前环境下安装pyinstaller

 以在 pip 时加上镜像源的地址:

pip install installer

结果:经过测试,我自己的打包的exe在原来写代码的环境中创建的包大小接近330M,但是创建一个新的环境之后,我的打包只有70M,虽然还是很大,但是已经能够接受了,启动速度也快了很多,因为我使用的程序里面包括了numpy、pandas、sklearn等几个大包,这几个包单独也是几十M的样子。

二、pyinstaller打包多文件的方法

我的程序需要引用自己的模块,程序结构如下:

主程序只有上面的一个文件,rain和logistics_regression是自己创建的文件夹,下面有python模块,其中在主程序里面引入了如下包:

import tkinter as tk   
import tkinter.ttk as ttk    
import time
from tkinter.filedialog import askopenfilename,asksaveasfilename
import os
import datetime
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score    # 召回率
from sklearn.metrics import accuracy_score  # 精确率
from sklearn.metrics import f1_score        # f1# 下面是自己编写的相关包
from rain import rain_extract,rain_solve,date_solve
from logistics_regression import logistics

1 第一步:生成spec文件

(1)首先打开conda prompt

(2)激活自己创建的环境

conda activate python3.10.11

(3) 通过cd命令进入到主程序所在的文件夹

(4)使用pyi-makespec命令生成spec文件

pyi-makespec  -F  -w  tkinter_model.py
# -F 表示将所有的文件打包成一个exe文件
# -w 表示这是一个窗体程序,不需要打开控制台

pyi-makespec命令常见的参数有,还有很多,没列举完全:

> pyi-makespec --help-D, --onedir          Create a one-folder bundle containing an executable (default)-F, --onefile         Create a one-file bundled executable.-p DIR, --paths DIR   A path to search for imports (like using PYTHONPATH). Multiple paths are allowed, separated by';'.--hidden-import MODULENAME, --hiddenimport MODULENAMEName an import not visible in the code of the script(s). This option can be used multipletimes.--exclude-module EXCLUDES  Optional module or package (the Python name, not the path name) that will be ignored (asthough it was not found). This option can be used multiple times.Windows and Mac OS X specific options:-c, --console, --nowindowed  Open a console window for standard i/o (default). On Windows this option has no effect if thefirst script is a '.pyw' file.-w, --windowed, --noconsoleWindows and Mac OS X: do not provide a console window for standard i/o. On Mac OS this alsotriggers building a Mac OS .app bundle. On Windows this option is automatically set if thefirst script is a '.pyw' file. This option is ignored on *NIX systems.--hide-console {minimize-early,hide-late,minimize-late,hide-early}Windows only: in console-enabled executable, have bootloader automatically hide or minimizethe console window if the program owns the console window (i.e., was not launched from an existing console window).

2 第二步:修改spec文件

spec文件本质上也是一个python文件,只不过后缀改了,格式如下:

# -*- mode: python ; coding: utf-8 -*-a = Analysis(['tkinter_model.py','rain/date_solve.py','rain/rain_extract.py','rain/rain_solve.py','logistics_regression/logistics.py'],pathex=[],binaries=[],datas=[],hiddenimports=["openpyxl.cell._writer"],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,
)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,a.binaries,a.datas,[],name='tkinter_model',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=False,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)

文件解读:

其中:

(1)表示的是自己写的模块,我全部添加进来了

(2)表示资源数据,比如有一些JSON文件,图片、图标等,放置在当前目录之下的某一个文件夹之下,需要指定,比如 datas=["sources"]

(3)hiddenimports指的是在打包的过程中针对某些缺失的模块隐式导入。比如我的程序如不过不添加这个,在打包完之后运行,会显示一个错误:

No module named 'openpyxl.cell._writer'

所以我需要隐式导入这个模块。

3 第三步:打包,即运行spec文件

Pyinstaller xxx.spec

参考文献:

用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)_编程网

python程序打包成exe全流程纪实(windows) - 知乎

【python】tkinter程序打包成exe可执行文件 全流程记录(windows系统)

 PyInstaller打包exe闪退,No Model named XXX问题_pyinstaller打包 no module named 'openpyxl.cell._writ-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449543.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django的web框架Django Rest_Framework精讲(二)

文章目录 1.自定义校验功能(1)validators(2)局部钩子:单字段校验(3)全局钩子:多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存,新增和更新数据&…

【数据库】创建索引的注意事项

🍎个人博客:个人主页 🏆个人专栏:数据库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 结语 我的其他博客 前言 在数据库设计和优化中,索引的合理使用是提高查询性能和加速数据检索的关键因素之一。通过选…

关于华为应用市场上架,申请权限未告知目的被驳回问题的简单处理方式

关于华为应用市场上架过程中出现的【您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(存储、拍照)等权限,不符合华为应用市场审核标准。】 使用方式: 1、引入 import permision from "/m…

使用MATLAB驱动USRP-N320实现OFDM自收自发

文章目录 前言一、收发代码二、截取一帧 OFDM三、执行主函数四、运行结果五、资源自取 前言 本文作为实验结果记录及测试,方便后面回顾所做的工作。本文基于一台电脑和一台 USRP 设备实现了 OFDM 自发和自收功能 一、收发代码 ofdm_tx_rx_test.m 核心代码&#x…

Linux 系统开始配置

文章目录 备份源为root 设置密码安装基本工具切换root 用户删除snap从 Ubuntu 移除 Snap 后使用 deb 文件安装软件商店和 Firefox在 Ubuntu 系统恢复到 Snap 软件包总结 删除 vim安装neovim在线安装neovim压缩安装neovim安装lazyvim安装剪切板 安装qt配置 Qt 环境不在sudoers文…

预处理详解(上)

⽬录: 1. 预定义符号 2. #define定义常量 3. #define定义宏 4. 带有副作⽤的宏参数 5. 宏替换的规则 6. 宏函数的对⽐ 7. #和## 8. 命名约定 9. #undef 10. 命令⾏定义 11. 条件编译 12. 头⽂件的包含 13. 其他预处理指令 正⽂开始 1. 预…

Facebook未来展望:社交媒体的下一个篇章

社交媒体一直是连接人与人之间的纽带,而Facebook则一直在推动这一领域的发展。随着科技不断演进和社会需求的不断变迁,Facebook正积极筹谋社交媒体的下一个篇章。本文将深入剖析Facebook的未来展望,探讨其在社交媒体领域所迎接的新时代。 1. …

2023年计算机视觉领域突破性研究有哪些?

B站:啥都会一点的研究生公众号:啥都会一点的研究生 ​回顾2023年,计算机视觉领域有哪些较为突出的研究成果?一起看看吧 SAM(Segment Anything Model) SAM 由 Meta AI 开发,是 CV 中分割任务的基础模型,彻…

Lambda表达式(匿名函数)

C11中引入了lambda表达式,定义匿名的内联函数。 我们可以直接原地定义函数而不用再跑到外面去定义函数跳来跳去。 同时在stl的排序上也有作用。 [capture] (parameters) mutable ->return-type {statement}下面逐一介绍各个参数的含义. [capture] : 捕获&#…

【Rust】——rust前言与安装rust

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

【gcc】webrtc发送侧计算 丢包率

大神的分析 : 提到: 每当收到cc-feedback或者收到RR-report的时候就能统计出丢包率,在cc-controller中就会调用SendSideBandwidthEstimation::UpdatePacketsLost()去更新丢包率,同时进行码率预估 G:\CDN\rtcCli\m98\src\modules\congestion_controller\goog_cc\send_side_b…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第6章 逻辑斯谛回归与最大熵模型(1)6.1 逻辑斯谛回归模型

文章目录 第6章 逻辑斯谛回归与最大熵模型6.1 逻辑斯谛回归模型6.1.1 逻辑斯谛分布6.1.2 二项逻辑斯谛回归模型6.1.3 模型参数估计6.1.4 多项逻辑斯谛回归 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第3章 k邻近邻法 《统计学习…