使用PyInstaller将Python程序打包成单独的.exe可执行文件
写在本文前:
为什么要出这篇文章?
Python作为一种流行的编程工具,随着近年来人工智能AI的快速发展,逐渐受到大众的倾心。但python作为一个应用,需要配置特定的运行环境,同时,由于python大量的第三方库,导致用户使用python编程的门槛也变高。这些都意味着用户需要在自己的电脑上安装python环境和特定的第三方库。而且大部分的软件都自带有GUI操作界面(Graphical User Interface),方便用户在不需要看懂程序底层代码的情况下,也可以快速地上手该软件。而python写的代码一般默认是没有GUI界面的,这些都导致了用户与python程序的交互变得不那么愉快。
因此,将Python 程序打包成一个可独立执行的文件(软件包)是非常有必要的,而PyInstaller就是这样一个优秀的应用。它通过读取已编写好的 Python 脚本,分析代码执行需要的模块和库,然后将其依赖库一同打包,并转成可直接脱离于python环境下独立运行的程序。目前支持 Windows、Linux 和 Mac OS 系统。
PyInstaller是一款强大的免费开源工具,允许开发者将Python应用程序及其所有依赖项打包成为一个独立的、跨平台的可执行文件。比如在Windows操作系统上,我们可以将Python脚本转换为.exe格式,使用户无需依赖Python环境就能直接运行脚本程序。
接下来,笔者将介绍如何使用PyInstaller将Python程序打包成单独的exe文件。
首先,请确保已经安装了Python环境和PyInstaller库。
其中,PyInstaller库的安装方法:命令行窗口(CMD)中执行以下命令:pip install pyinstaller
1、编写并测试Python程序
确保该Python程序(如script.py)能够在本地正常运行。
打开命令行界面,通过cd命令切换到包含待打包的该Python源代码的目录。如笔者电脑是:C:\Users\ygb76486126\。执行命令:cd C:\Users\ygb76486126
2、正式打包
要将script.py打包为单个EXE文件,打开命令行并导航至包含该脚本的目录,然后执行以下命令:pyinstaller -F C:\Users\ygb76486126\script.py
-F标志指定PyInstaller生成一个单一的可执行文件,不包含所有依赖的文件夹结构。
3、添加窗口化运行选项(可选)
如果您希望生成的应用程序在运行时没有命令行窗口(仅适用于GUI应用),可以添加-w参数:
pyinstaller -F -W C:\Users\ygb76486126\script.py
4、设置程序图标(可选)
若需为生成的exe文件添加自定义图标,应先准备好.ico格式的图标文件,并将它放在script.py同一目录下,然后在打包命令中包含-i选项:
pyinstaller -F -w -i C:\Users\ygb76486126\icon.ico C:\Users\ygb76486126\script.py
5、打包数据文件和其他资源
如果程序引用了外部数据文件(如图片、配置文件或字体),您需要确保这些文件也被包含在打包中。可以使用–add-data选项指定文件及其在打包后的位置:
pyinstaller -F -w -i C:\Users\ygb76486126\icon.ico –add-data “data_file.dat;relative_path_in_dist” C:\Users\ygb76486126\script.py
这里的–add-data “data_file.dat;relative_path_in_dist”表示将data_file.dat从当前目录复制到输出目录的relative_path_in_dist下。
6、生成和查看输出结果
执行上述命令后,PyInstaller会在当前目录下创建一个名为dist的文件夹,其中包含了打包后的可执行文件。在该目录下可以找到名为script.exe的文件。双击即可在没有Python环境的Windows系统上运行。
更多PyInstaller打包参数说明:
· -F 或 –onefile:将所有内容打包到一个exe文件中。
· -D 或 –onedir:创建一个包含exe和所有依赖文件的目录结构。
· -w 或 –windowed:如果程序是GUI应用,运行时不显示控制台窗口。-c 有黑窗口,-w 去掉黑窗口
· -i 或 –icon=FILE.ico:指定程序的图标文件。
· –add-data PATH;DESTPATH:将指定的文件或目录添加到打包结果中,并指定在程序内部访问的相对路径。
· –hidden-import MODULE_NAME:强制导入未被自动检测到的模块。
· –exclude-module MODULE_NAME:排除特定模块,防止其被打包。
· –clean:在重新打包时清理旧的构建文件。
常用的一些打包命令:可根据自己需要进行适当修改。
无黑窗口且程序带有logo的单独exe程序
pyinstaller -F -w -i C:\Users\ygb76486126\logo.ico C:\Users\ygb76486126\script.py
有黑窗口且程序带有logo的单独exe程序
pyinstaller -F -i C:\Users\ygb76486126\logo.ico C:\Users\ygb76486126\script.py
pyinstaller -F -c -i C:\Users\ygb76486126\logo.ico C:\Users\ygb76486126\script.py
程序带有logo,生成程序包含文件夹(内有依赖库)
pyinstaller -D -i C:\Users\ygb76486126\logo.ico C:\Users\ygb76486126\script.py # 有黑窗口
pyinstaller -D -w -i C:\Users\ygb76486126\logo.ico C:\Users\ygb76486126\script.py # 无黑窗口
三、注意事项
·
PS:需考虑依赖问题,确保所有Python依赖库都已经在当前环境中正确安装。对于某些复杂的应用程序,您可能还需要考虑使用virtualenv或conda创建独立的环境,以隔离和精确控制所需的库版本。