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

news/2024/12/22 20:07:31/

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

http://www.ppmy.cn/news/1350002.html

相关文章

林浩然与杨凌云的Java世界奇遇记:垃圾回收大冒险

林浩然与杨凌云的Java世界奇遇记:垃圾回收大冒险 The Java Adventure Chronicles of Lin Haoran and Yang Lingyun: Garbage Collection Odyssey 在一个充满0和1代码森林的世界里,住着两位勇敢的程序员侠侣——林浩然和杨凌云。林浩然是个身怀Java绝技的…

[职场] 如何通过运营面试_1 #笔记#媒体#经验分享

如何通过运营面试 盈利是公司的事情,而用户就是你运营的事情。你需要彻底建立一个庞大而有效的用户群,这样才能让你们的公司想盈利就盈利,想战略就战略,想融资就融资。 一般从事运营的人有着强大的自信心,后台数据分析…

Ainx-V0.2-简单的连接封装与业务绑定

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于Ainx系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基础系列…

爬爬今天爬小说————爬虫练习

爬不同的的小说,会有略微的改动。 我今天这个是从一章的提前到全部的提前。 在我们电脑里面了,想怎么看就怎么看。 代码代码: import re import requestsheaders {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x6…

Java图形化界面编程——弹球游戏 笔记

Java也可用于开发一些动画。所谓动画,就是间隔一定的时间(通常小于0 . 1秒 )重新绘制新的图像,两次绘制的图像之间差异较小,肉眼看起来就成了所谓的动画 。 ​ 为了实现间隔一定的时间就重新调用组件的 repaint()方法,可以借助于…

【每日一题】牛客网——链表分割

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有…

设计模式-状态模式 State

状态模式 一、简介概述二、有限状态机1、分支法2、查表法3、状态模式 三、重点回顾 一、简介概述 状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。 状态设计模式是一种行为型设计模式,它允许对象在其内部状态发生变化…

【Kubernetes】kubectl top pod 异常?

目录 前言一、表象二、解决方法1、导入镜像包2、编辑yaml文件3、解决问题 三、优化改造1.修改配置文件2.检查api-server服务是否正常3.测试验证 总结 前言 各位老铁大家好,好久不见,卑微涛目前从事kubernetes相关容器工作,感兴趣的小伙伴相互…