首页Python【Python计算生态】P...

【Python计算生态】PyInstaller——将Python程序打包成独立可执行文件

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

PyInstaller 是一个用于将 Python 应用程序打包成独立可执行文件的第三方库。它支持 WindowsLinux 和 macOS 等多个平台,能将 Python 脚本及其依赖项打包成一个可执行文件,这样用户无需安装 Python 解释器或任何依赖库即可运行程序。
需要注意的是,PyInstaller 不是跨编译器,必须在目标平台上运行。例如,要制作 Windows 应用程序,您需要在 Windows 上运行 PyInstaller;要制作 GNU/Linux 应用程序,您需要在 GNU/Linux 上运行它,依此类推。
直接使用pip安装:
pip install pyinstaller
GitHub页面:
https://github.com/pyinstaller/pyinstaller

02
基本使用

PyInstaller 的基本使用非常简单,假设,当前目录下有一个名为 hello.py 的 Python 脚本,内容如下:

print("Hello, PyInstaller!")
input("Press Enter to exit...")  # 等待用户输入

只需在命令行中运行以下命令,将脚本打包为可执行文件:

pyinstaller hello.py

执行该命令后,PyInstaller 会进行以下操作:

  • 生成 .spec 文件:在脚本所在的文件夹中写入 .spec 文件。该文件包含了打包过程的详细配置信息,例如脚本的依赖项、打包选项等。
  • 创建 build 文件夹:如果脚本所在的文件夹中没有 build 文件夹,PyInstaller 会创建一个。该文件夹用于存放一些日志文件和临时工作文件。
  • 写入日志和工作文件:在 build 文件夹中写入一些日志文件和临时工作文件,这些文件记录了打包过程的详细信息,有助于调试和排查问题。
  • 创建 dist 文件夹:如果脚本所在的文件夹中没有 dist 文件夹,PyInstaller 会创建一个。该文件夹用于存放最终打包好的可执行文件。
  • 生成可执行文件:在 dist 文件夹中创建一个包含可执行文件的文件夹(如果使用了某些打包选项,可能是一个单独的可执行文件)。这个可执行文件就是要分发给用户的应用程序。

执行上述命令后,dist 文件夹中包含了打包好的可执行文件,可以直接运行该可执行文件。


03
命令选项

pyinstaller 命令的语法如下:

pyinstaller [options] script [script …] | specfile

其中:

  • [options]:可选参数部分,用于指定打包过程中的各种设置,例如是否将所有依赖打包成一个文件、是否显示命令行窗口等。

  • script [script …]:要打包的 Python 脚本文件。当指定多个脚本时,所有脚本都会被分析并包含在最终的打包结果中。

  • | specfile:也可以指定一个 .spec 文件。.spec 文件是 PyInstaller 生成的配置文件,包含了打包过程的详细信息。可以手动编辑 .spec 文件以实现更高级的定制化操作。编辑完 .spec 文件后,可以直接指定spec 文件来打包。

PyInstaller 提供了许多选项参数,下面为一些常用的选项,完整的选项列表可以前往官方文档查看:

https://pyinstaller.org/en/stable/usage.html
  • 存放路径相关参数:

  • distpath DIR:指定打包后的应用程序存放路径(默认为 ./dist)。

  • –workpath WORKPATH:指定临时工作文件、日志文件等存放路径(默认为 ./build)。

  • 生成内容相关参数:

  • -D, –onedir:生成一个包含可执行文件的文件夹(默认)。

  • -F, –onefile:生成一个单独的可执行文件。即将所有依赖项打包成一个单独的可执行文件,方便分发和使用,用户只需要一个文件就能运行程序。

  • -n NAME, –name NAME:指定打包后的可执行文件或文件夹的名称,默认为第一个脚本的文件名。

  • 打包内容相关参数:

  • –add-data SOURCE:DEST:添加额外的数据文件或目录到应用程序中。格式为 source:dest_dir,其中 source 是要收集的文件或目录路径,dest_dir 是相对于应用程序顶层目录的目标路径,两者之间用分号(Windows)或冒号(Linux 和 macOS)分隔。可以多次使用该选项。

  • 窗口显示相关参数:

  • -c, –console, –nowindowed:打开控制台窗口用于标准输入/输出(默认),即使程序是 GUI 应用。在 Windows 上,如果第一个脚本是 .pyw 文件,则此选项无效。

  • -w, –windowed, –noconsole:在 Windows 和 macOS 上不提供控制台窗口。在 macOS 上,此选项还会触发构建 macOS .app 应用程序包。在 Windows 上,如果第一个脚本是 .pyw 文件,则此选项会自动启用。
  • 图标设置相关参数:
  • -i, –icon为打包后的可执行文件指定图标。图标文件格式通常为 .icoWindows)或 .icnsmacOS)。

以下示例脚本实现了一个简单的 GUI 应用程序,即使用 tkinter 库创建一个窗口,包含一个按钮和一个标签,点击按钮时,标签的文本会更新。代码如下:

import tkinter as tk
from tkinter import messagebox

# 定义按钮点击事件的处理函数
def on_button_click():
    label.config(text="Hello, PyInstaller!")
    messagebox.showinfo("Info""You clicked the button!")

# 创建主窗口
root = tk.Tk()
root.title("Simple GUI App")
root.geometry("300x200")  # 设置窗口大小

# 创建一个标签
label = tk.Label(root, text="Welcome to the GUI App!", font=("Arial", 14))
label.pack(pady=20)  # 添加一些垂直间距

# 创建一个按钮
button = tk.Button(root, text="Click Me!"command=on_button_click, font=("Arial", 12))
button.pack(pady=10)

# 运行主循环
root.mainloop()

使用 PyInstaller 将上述脚本文件打包成一个名为 myapp 的独立可执行文件,并存放在当前目录中。该文件运行时不会显示命令行窗口,并且使用 logo.ico 作为图标:

pyinstaller --onefile --windowed --name myapp --icon logo.ico --distpath ./ hello_gui.py

生成的可执行文件如下:

直接运行该可执行文件即可打开创建的GUI应用程序。


更多内容可以前往官方文档查看:

https://pyinstaller.org/en/stable/

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments