目录
关于依赖项和资源(第三方库或者模块,使用到的图片,配置文件)
六一快乐!!!!
前言
在开发Python应用程序时,将代码打包成可执行文件(.exe)是一个常见的需求。,主要是方便接收者的使用,在没有python环境下也能正常打开的可执行文件。本文打包的python文件为事先写好的一个按钮小程序。资源包将会在代码包中展示出来。下面我将详细讲解从零开始把python文件打包成可执行文件的步骤。
安装所需要的工具
在开始之前,我们需要安装打包的工具,我们将使用“pyinstaller”
来打包Python文件成可执行文件。
关于“pyinstaller”
PyInstaller的主要目标是使Python应用程序的部署变得更加简单。它能够将Python代码和其依赖项打包成一个单个的可执行文件,从而消除了用户在部署和运行Python应用程序时需要手动安装Python解释器和相关依赖项的繁琐过程。
PyInstaller支持跨平台运行,并可以在Windows、Mac和Linux等操作系统上使用。它可以处理包括命令行脚本、图形界面应用程序和多个Python文件等不同类型的Python代码。
安装“pyinstaller”
1.打开命令行终端(命令提示符):
win+r打开运行,输入cmd,回车进入命令行终端。
2.在命令行终端输入下列命令,并按回车确认:
pip install pyinstaller
等待安装完成即可。
准备python文件
在打包之前,确保你的Python文件可以独立运行,并不依赖于动态加载的模块或其他外部资源。如果你的文件有依赖项,确保它们已经被正确地安装并能够在打包后被访问。
打包python文件
1.打开命令行终端,并控制前往到你包含python文件的目录。这里我有个习惯就是我不会先打开命令行再前往目录,我会之间打开我文件所在地,并直接在这个目录下打开命令行终端:
这样子直接就是在这个目录下的命令行终端了。
2.输入打包的指令然后回车运行:
pyinstaller --onefile your_script.py
这将使用pyinstaller
工具将Python文件打包成一个独立的可执行文件。
--onefile
选项表示将所有依赖项合并为单个可执行文件,而不是生成多个文件。
3. 打包过程可能需要一些时间,等待它完成。
一旦完成,你将在当前目录中看到一个名为dist
的文件夹。
运行可执行文件
- 1.进入
dist
文件夹,你将找到生成的可执行文件,名字为your_script.exe
。 - 2.将可执行文件复制到你想要运行它的计算机上。
- 3.双击可执行文件,你的Python程序将开始运行。
注意事项!!!!!
- 如果你的Python程序有外部库的依赖,你需要在打包之前确保这些库已经安装,并使用适当的命令参数告知
pyinstaller
包含它们。- 如果你的程序使用了图形界面(GUI),你可能需要在打包时指定一些特殊的选项来确保界面在打包后可以正常运行。
- 在打包过程中,
pyinstaller
将会创建一些临时文件和文件夹,你可以选择在打包完成后手动删除它们。
关于依赖项和资源(第三方库或者模块,使用到的图片,配置文件)
- 1.依赖项管理:如果你的Python程序依赖于外部库或模块,你需要确保这些依赖项在打包后可以正确访问。可以通过在打包命令中使用
--hidden-import
参数来指定需要包含的额外模块。 - 2.数据文件和资源:如果你的程序需要访问数据文件或其他资源文件,例如配置文件、图像等,确保这些文件与可执行文件一起打包。你可以使用
--add-data
参数来指定包含这些文件,例如:
pyinstaller --onefile --add-data "data_files;data_files" your_script.py
打包多个文件
如果你的应用程序由多个Python文件组成,你可以通过将所有文件作为参数传递给pyinstaller
命令来打包它们。
pyinstaller --onefile file1.py file2.py
这将打包所有指定的文件,并生成一个单独的可执行文件。
结束了???怎么可能,实际打包出现的问题多的要死!!
当我第一次用上面方式打包了一次并且成功打包成可执行文件的时候,好爽的感觉!!一打开这个文件,我发现成了“不可执行文件”,路径错误问题,第三方库没有打包过去,环境也没有一起打包过去......
那怎么办啊,语法又记不住,那就用spec文件。
spec文件
spec文件是PyInstaller工具生成的一个配置文件,用于定义和配置打包过程中的各种选项和参数。它是一个纯文本文件,通常与要打包的Python脚本文件位于同一目录中,并以.spec
作为文件扩展名。
spec文件包含了一些重要的信息,例如要打包的脚本文件、依赖项、数据文件、资源文件等。通过编辑spec文件,你可以自定义打包过程的行为和结果,以满足特定的需求。
创建spec文件
使用PyInstaller进行打包时,可以通过两种方式生成spec文件:
1.自动创建
在命令行终端中执行以下命令,PyInstaller将自动为指定的Python脚本文件生成一个默认的spec文件:
pyinstaller your_script.py
这将在你python文件所在目录下生成一个名为your_script.spec的spec文件,其中your_script.py是要打包的Python脚本文件名。
2.手动创建
也可以手动创建一个spec文件,并在其中指定需要打包的文件、依赖项和其他选项。创建一个新的文本文件,并使用以下基本结构:
# your_script.spec # 导入所需的模块 import sys from PyInstaller.utils import collect_data_files # 定义spec文件配置 block_cipher = None a = Analysis(['your_script.py'], # 替换成你要打包的Python脚本文件 pathex=[], binaries=[], datas=collect_data_files('your_package'), # 替换成你要包含的数据文件路径 hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='your_script', # 替换成你的可执行文件名 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True)
1.
修改spec文件内容
使用文本编辑器打开.spec文件(your_script_name.spec),并根据需要进行修改。你可以自定义输出文件的名称、要包含的附加文件等选项。
1.添加第三方库:在.spec文件中,使用--add-data
选项添加第三方库的文件。
- 如果第三方库包含非二进制文件(例如Python脚本、配置文件),可以使用
--add-data
选项来指定库文件相对于脚本文件的路径。
datas=[('path/to/library/files/*', 'library/files')]
如果第三方库包含二进制文件(例如DLL文件、共享库),可以使用--add-binary选项来包含这些文件。指定库文件相对于脚本文件的路径。
binaries=[('path/to/library/binary', '.')]
2. 添加图片路径:在.spec文件中,可以使用--add-data
选项添加图片路径,以确保图片文件被正确地打包进可执行文件。
datas=[('path/to/image/file.jpg', '.')]
将path/to/image/file.jpg
替换为实际的图片路径,并根据需要调整目标文件夹。
打包文件
编辑好了spec文件,你可以使用以下命令来执行打包过程:
pyinstaller your_script.spec
然后就会根据spec文件中的配置来进行打包文件,生成可执行文件 。
这是我打包一个按钮小程序时用到的spec文件:
# -*- mode: python ; coding: utf-8 -*- block_cipher = None import sys sys.path.append('d:/python_env/spider2_env/lib/site-packages') import tkinter as tk from tkinter import messagebox,ttk from PIL import ImageTk, Image import os import random a = Analysis( ['anniu.py'], pathex=['D:/exe/py1'], binaries=[], datas=[('D:\\exe\\py1\\imgs\\a.jpg', 'imgs'), ('D:\\exe\\py1\\imgs\\c.jpg', 'imgs')], hiddenimports=['PIL', 'tkinter', 'random', 'PIL.ImageTk'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='anniu', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )
最后成功了。
希望本篇文章能够对你遇到的问题或者学习路上提供帮助!