[Python程序打包: 使用PyInstaller制作单文件exe以及打包GUI程序详解]

文章目录

    • 概要
    • Python 程序打包—使用 Pyinstaller 打包 exe
    • Python程序打包—使用Pyinstaller打包GUI程序
    • Python程序打包—使用 Pyinstaller 设置 exe 图标
    • 小结

概要

使用PyInstaller工具将Python程序打包成可执行(EXE)文件。将Python程序打包成EXE的好处之一是,它使得你的应用程序更容易在没有Python解释器的系统上运行,同时还提供了更好的用户体验。

Python 程序打包—使用 Pyinstaller 打包 exe

安装好 Pyinstaller就可以愉快的打包了,这里只需要一条命令即可。

假如 Python 程序的主入口文件是xx.py,那么你的打包命令就是:

pyinstaller xx.py

执行成功后,将会生成两个文件夹:📁build 和 📁dist 。

示例代码

下边的代码使用到了PySimpleGUI库,需要先安装该库,安装命令

pip install pysimplegui
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件    :test.py
@说明    :使用Pysimplegui实现一个简单的窗口
@时间    :2023/10/13 09:44:46
@作者    :aliha
@版本    :1.0
'''import PySimpleGUI as sg  layout = [[sg.Text('请输入内容:')],  [sg.InputText()],  [sg.Submit('确认'), sg.Cancel('取消')]
] window = sg.Window('Demo示例', layout)  event, values = window.read()   text_input = values[0]  
sg.popup('你输入了:', text_input)

执行打包

运行打包命令

pyinstaller test.py

最后一行提示 … completed successfully就是成功了,别的不认识也没关系。

在这里插入图片描述

打包结果解读
我们可以清楚的看到 test.py 的同级目录下多出来两个文件夹和一个文件:📁build,📁dist 和 📄test.spec。

• 📁dist:这个是我们打包出来的程序文件;

• 📁build:这个文件夹是程序打包时构建过程生成的,没什么🐦用;

• 📄test.spec:这个文件是打包的中间配置文件。

打包效果展示
点击 📁dist 文件夹内的 test.exe 就可以运行程序,具体效果如下⬇️:

点开记得关闭防护墙,不然会自动抹除生成文件。
在这里插入图片描述

Python程序打包—使用Pyinstaller打包GUI程序

打包GUI程序

示例代码都是 GUI 程序 ,打包后运行时带一个黑框,体验太糟糕,做掉它。

假如你的 Python 程序的主入口文件是xx.py,那么你的打包命令就是:

Pyinstaller -w xx.py

📙注意:如果是和-F参数一起使用,应该是-Fw,而不是-F -w。

示例代码
本代码使用到了PySimpleGUI库,需要先安装该库,安装命令

pip install pysimplegui
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件    :test.py
@说明    :使用Pysimplegui实现一个简单的窗口
@时间    :2023/10/13 09:44:46
@作者    :aliha
@版本    :1.0
'''import PySimpleGUI as sg  layout = [[sg.Text('请输入内容:')],    [sg.InputText()],    [sg.Submit('确认'), sg.Cancel('取消')]
] window = sg.Window('Demo示例', layout)  event, values = window.read()   text_input = values[0]  
sg.popup('你输入了:', text_input)

执行打包
运行打包命令

pyinstaller -Fw test.py

打包效果展示
点击 test.exe 就可以运行程序,具体效果如下⬇️:

图片

可以看到,命令行窗口就隐藏掉了

Python程序打包—使用 Pyinstaller 设置 exe 图标

设置程序图标

假如你的 Python 程序的主入口文件是xx.py
图标文件完整路径是x:\xx\xx.ico那么你的打包命令就是:

pyinstaller -i x:\xx\xx.ico xx.py

📡在线图片转 ICO:[https://convertio.co/zh/png-ico/]

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件    :test.py
@说明    :使用Pysimplegui实现一个简单的窗口
@时间    :2023/10/13 09:44:46
@作者    :aliha
@版本    :1.0
'''import PySimpleGUI as sg  layout = [[sg.Text('请输入内容:')],  [sg.InputText()],  [sg.Submit('确认'), sg.Cancel('取消')]
] window = sg.Window('Demo示例', layout)  event, values = window.read()   text_input = values[0]  
sg.popup('你输入了:', text_input)

执行打包
运行打包命令:

pyinstaller -i icon.ico test.py

📙:这里icon.ico与test.py在同一个目录下,所以直接写文件名称即可。

在这里插入图片描述

小结

Python 程序打包—使用 PyInstaller 打包 EXE

安装 PyInstaller:

通过以下命令安装 PyInstaller:

pip install pyinstaller

进入项目目录:

在命令行中,进入 Python 项目所在的目录。

运行 PyInstaller:

使用以下命令将 Python 脚本转换为 EXE 文件
pyinstaller your_script.py

生成单文件 EXE:

若要生成单个 EXE 文件,使用 --onefile 选项:
pyinstaller --onefile your_script.py

自定义 EXE 文件名:

使用 --name 选项自定义生成的 EXE 文件名称:
  pyinstaller --onefile --name your_custom_name your_script.py

处理依赖关系:

PyInstaller 通常会自动处理脚本的依赖关系,但可以使用 --add-data 和 --add-binary 选项手动添加依赖项。

测试 EXE 文件:

在“dist”目录中找到生成的 EXE 文件,并确保它在没有 Python 解释器的环境中正常运行。

附加注意事项:

提供了解决一些常见问题的方法,如处理文件路径问题和 DLL 文件缺失。

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

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

相关文章

【产品设计】SaaS产品数据分析之指标与标签

数据分析能够应用到各个领域和岗位,那么在SaaS产品中的应用会是如何?本文将探索SaaS产品在数据分析中的应用,并对其指标与标签的设计进行总结分析,一起来看看吧。 数据分析是业务开展过程中,收集记录各种行为产生的数据…

Linux 进程(二)

1.当前工作目录 Linux 下使用 ls /proc 查看程序中的进程,其中这些蓝色的数字代表的就是进程。 其中cwd(current working directory)就是当前工作目录,那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序,可执行程序需要依…

jmeter多个接口测试

针对接口文档,进行对应接口设计,多个接口设计用例需要使用事物控制器。 1.通过登录接口提取sign值 发送一个登录请求,然后通过正则表达式提取该sign值 正则表达式的使用,我稍后会在下一个博文中详细说明,这边就不多说…

如何用SWIG封装c++接口给java使用?

SWIG是什么? SWIG(Simplified Wrapper and Interface Generator)是一个将C/C接口转换为其他语言接口的工具,从而可以讲C/C的库集成到其他语言的系统中。目前SWIG已经可以支持Python, Java, C#,Ruby,PHP,R语言等十多种语言。 官方网址&…

Android项目实战开发-----期末总结2

项目三:网络层和数据模型的封装 任务一:网络请求和数据解析 1,网络请求 (1)Android中的网络存储主要是使用HTTP/HTTPS协议访问服务器,与服务器发生数据交互。 (2)Android提供两种…

python -- python安装

1、python的诞生和发展: python语言是一种解释型、面向对象型、动态数据类型的高级程序设计语言。 2、python的安装: 1、安装解析器: 在安装的过程中需要注意的是: 在安装pycharm的时候也是同样的道理,需要指定安装…

【长文干货】Python可视化教程

文章目录 数据介绍Matplotlib散点图折线图柱形图直方图 Seaborn散点图折线图柱形图直方图 Bokeh散点图折线条形图交互式 Plotly基本组合优化:定制化下拉菜单 总结 数据介绍 在这个小费数据集中,我们记录了20世纪90年代初期餐厅顾客在两个半月内给出的小…

【机器学习 | 可视化】回归可视化方案

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

LESS的叶绿素荧光模拟实现——任意波段荧光模拟

目录 前言一、任意波段荧光模拟的实现二、需要注意的输入参数 前言 此专栏默认您对LESS (LargE-Scale remote sensing data and image Simulation framework) 模型和叶绿素荧光(Sun-Induced chlorophyll Fluorescence, SIF)有一定的了解。当然,您也可以在这里下载中…

Kubernetes

Kubernetes Docker的安装Docker安装:安装docker依赖环境配置国内docker-ce的yum源(这里采用的是阿里云)安装docker。插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自…

C++基础 -17-继承中 基类与派生构造和析构调用顺序

首先声明 定义了派生类会同时调用基类和派生的构造函数 定义了派生类会同时调用基类和派生的析构函数 那么顺序如何如下图 构造由上往下顺序执行 析构则完全相反 #include "iostream"using namespace std;class base {public:base(){cout << "base-bui…

orvibo旗下的VS30ZW网关分析之二:版本回退方法

概述 上接第一篇: orvibo旗下的VS30ZW网关分析之一-CSDN博客 此产品VS30ZW支持openwrt的页面,可以版本回退进行刷机。 openwrt固件下载: 固件名称:openwrt-VS30ZW-mt7628.bin 链接地址:https://download.csdn.net/download/leekwen/88579427 版本回退方法: 1、同…

多模态大模型总结2(主要2023年)

LLaVA-V1&#xff08;2023/04&#xff09; 论文&#xff1a;Visual Instruction Tuning 网络结构 如下图 所示为 LLaVA-v1 的模型结构&#xff0c;可以看出其简化了很多&#xff0c;但整体来说还是由三个组件构成&#xff1a; Vision Encoder&#xff1a;和 Flamingo 模型的 V…

微信小程序获取手机号上限,怎么处理比较省钱

微信新规 微信2023年改了规则&#xff0c;原本免费的小程序获取手机号&#xff0c;现在如果要获取要1分钱一条。 有些小程序的用户非常恐怖&#xff0c; 比如一些工具类的&#xff0c; 群发类的。如果进入小程序就必须要获取小程序&#xff0c;就像是无底洞&#xff0c;让运营…

【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法

目录 说明&#xff1a; 1. 参数模型&#xff08;全局字典&#xff09; 2. 实现过程&#xff08;C&#xff09; 创建功能包 参数命令行的使用 YAML参数文件 rosparam命令 使用示例 编程方法&#xff08;C&#xff09; 配置代码编译规则 编译并运行 编译 运行 3. 实…

【C++笔记】红黑树的简易实现

【C笔记】红黑树的简易实现 一、什么是红黑树以及红黑树好在哪里1.1、什么是红黑树1.2、红黑树比AVL树好在哪里&#xff1f; 二、红黑树的模拟实现2.1、红黑树的插入2.2、仅变色调整2.3、变色单旋调整2.4、变色双旋调整 一、什么是红黑树以及红黑树好在哪里 1.1、什么是红黑树…

Docker容器网络模式

1.none网络 1&#xff09;使用默认网络模式创建一个BusyBox容器&#xff0c;用于对比none网络模式&#xff1b; 测试网络&#xff0c;可以正常连接外网。 2&#xff09;再创建一个none网络模式的BusyBox容器&#xff1b; 测试网络连接&#xff0c;无法连接外网。 总结&#x…

深入了解Spring Boot中@Async注解的8大坑点

文章目录 1. 缺少EnableAsync注解2. 异步方法需独立3. 不同的异步方法间无法相互调用4. 返回值为void的异步方法无法捕获异常5. 外部无法直接调用带有Async注解的方法6. Async方法不适用于private方法7. 缺失异步线程池配置8. 异步方法与事务的兼容结语 &#x1f389;深入了解S…

Ros报错:The Plugin for class ‘jsk_rviz_plugin/Plotter2D‘ failed to load

一般出现这种情况&#xff0c;是提醒Ros缺少某种库&#xff1a; 图中显示的错误是说明少了jsk_rviz_plugins库&#xff0c;他是一个提供原始rviz插件的包。 解决办法是安装相应的库与插件&#xff1a; #根据自己ROS的版本选择相应的指令 # ubuntu20.04:noetic sudo apt-get i…

RabbitMQ消息的应答

消息的应答机制 消费者完成一个任务可能需要一段时间&#xff0c;如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了&#xff0c;会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息&#xff0c;便立即将该消息标记为删除。在这种情况下&#xff0c;突然有个…