当前位置: 首页 > news >正文

python从入门到精通(二十):python的exe程序打包制作

python的exe程序打包制作

  • python打包的概念
  • python打包的模块
    • 导入模块
    • 安装验证
    • 基本语法
    • 命令参数
    • 文件夹模式
    • 单文件模式
    • 资源嵌入exe
    • 更改图标
    • 启动画面(闪屏)
    • 禁用异常提示

python打包的概念

将普通的*.py程序文件打包成exe文件。exe文件即可执行文件,打包后的*.exe应用不用依赖python,可以在他人的电脑上运行。
PyInstaller 制作出来的执行文件并不是跨平台的,如果需要为不同平台打包,就要在相应平台上运行PyInstaller进行打包。

python打包的模块

pyinstaller是一个第三方模块,专用于python程序的exe打包

导入模块

pip install pyinstaller

安装验证

pyinstaller --version

基本语法

最简单的打包方式是:

pyinstaller test.py  # 默认文件夹模式

pyinstaller生成spec文件将一些打包参数放到里面,然后进行打包,打包完成后目录下存在dist文件夹,里面有打包后的文件。还会生成一个build文件夹写入日志

命令参数

-D 文件夹模式。在打包完成后生成一个文件夹,其中包含一个exe文件和一个包含若干依赖文件的文件夹
-F 单文件模式。在打包完成后只会生成一个单独的exe文件
–add-data 指定一个文件夹或文件(非二进制),将其嵌入到exe中
–add-binary 指定二进制的文件夹或文件
-p/–paths提供一个路径进行搜索并且导入里面的模块(不同的路径使用路径分隔符os.pathsep分隔开,或者多次使用这个参数)这可以解决有时候第三方模块找不到的问题。
–hidden-import / --hiddenimport 需要进行额外导入的模块。当pyinstaller在程序中找不到一些模块时,需要你额外指定。这个参数可以多次使用,可以解决一些模块找不到的问题。
–splash 添加一个启动画面(图片文件)路径,在程序运行前显示指定的启动图片,起到加载提示的效果。
-c 打包程序运行后出现一个黑色的控制台窗口(默认)
-w 打包程序运行后隐藏控制台窗口
-i /icon 设置打包后exe程序的图标(只能在Windows和macOS上使用)
–disable-windowed-traceback 禁用异常提示(只能在Windows和macOS上使用)

命令实例:

pyinstaller -D -i "icon.ico" test.py

位置参数在打包时放在最后,是需要打包的文件路径,或是spec文件路径

文件夹模式

资源文件复制和exe文件位于同一位置

pyinstaller -w test.py

单文件模式

资源文件复制和exe文件位于同一位置

pyinstaller -w -F test.py

资源嵌入exe

资源嵌入exe只在单文件模式下使用。文件夹模式下,资源文件夹不会嵌入到exe中,但是会被复制到exe所在的文件夹。

文件开头通过以下函数返回正确的路径

import tkinter as tk  # 导入tkinter
import sys
import ostk = tk.Tk()  # 创建窗口
tk .title("目录扫描工具")  # 更改标题
def get_path(relative_path):try:base_path = sys._MEIPASSexcept AttributeError:base_path = os.path.abspath(".")return os.path.normpath(os.path.join(base_path, relative_path))
image = tk.PhotoImage(file=get_path("assets/1.png"))
label = tk.Label(tk , text="准备,开始扫描!", image=image, compound="top")
label.pack()  # 显示图片root.mainloop()  # 保持窗口运行
pyinstaller -w -F --add-data assets;assets test.py

更改图标

pyinstaller -w -F -i icon.ico my_app_name.py

启动画面(闪屏)

支持闪屏,需要先准备一张图片,必须是PNG格式(如果你安装了pillow模块,可以用pillow模块支持的其他格式)。然后,在打包时加上–splash参数,并传入图片路径。
在程序开头部分添加以下代码

try:import pyi_splashpyi_splash.close()
except ImportError:pass
pyinstaller --splash 2.png my_app_name.py

禁用异常提示

--disable-windowed-traceback

相关文章:

  • Sentinel 流控-关联模式
  • LeetCode:67.二进制求和
  • InternLM大模型实战-3.InternLM+Langchain搭建知识库
  • Map和Set(哈希表)
  • 【OpenHarmony硬件操作】风扇与温湿度模块
  • DarkSide针对VMware EXSI系统进行加密
  • CTR-----Click-Through Rate简单介绍
  • ClickHouse--04--数据库引擎、Log 系列表引擎、 Special 系列表引擎
  • 再说开源软件
  • 年假作业10
  • 【数据结构】11 堆栈(顺序存储和链式存储)
  • java客运管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • TCP和UDP相关问题(重点)——9.超时重传怎么实现的?
  • Docker- chapter 1
  • 【Linux学习】线程互斥与同步
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • express.js的介绍及使用
  • Material Design
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Quartz初级教程
  • Redis在Web项目中的应用与实践
  • SegmentFault 2015 Top Rank
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 初识 beanstalkd
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 详解移动APP与web APP的区别
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Spring第一个helloWorld
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2)nginx 安装、启停
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (一一四)第九章编程练习
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)jdk与jre的区别
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (轉貼) UML中文FAQ (OO) (UML)
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .describe() python_Python-Win32com-Excel
  • .Family_物联网
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core中的去虚
  • .NET 解决重复提交问题
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET基础篇——反射的奥妙
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET性能优化(文摘)