打包步骤
-
安装 PyInstaller
通过 pip 安装 PyInstaller:
pip install pyinstaller
-
项目结构
假设项目文件结构如下:
project_folder/ ├── main.py # 主程序 ├── activate3.py # UI 类 ├── new_ui.py # 新窗口 UI 类 ├── secret.key # 加密密钥文件 ├── resources/ # 资源文件夹 (包含一些图像或其他资源) │ ├── image1.png │ ├── image2.png
-
编写
main.spec
文件当你需要更多自定义打包选项时,可以使用 PyInstaller 的
.spec
文件。这个文件允许你排除不必要的库,添加资源文件等。编写示例
main.spec
文件:# -*- mode: python ; coding: utf-8 -*- block_cipher = None # 包含项目中的资源文件,如图片、密钥文件等 a = Analysis( ['main.py'], # 你的主程序文件 pathex=['.'], # 当前路径 binaries=[], datas=[ ('secret.key', '.'), # 包含密钥文件 ('resources/*', 'resources') # 包含资源文件夹中的所有文件 ], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=['tkinter', 'matplotlib', 'numpy'], # 剔除不必要的库 win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, [], exclude_binaries=True, name='my_program', # 输出的 exe 名称 debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=False, # 设置为 GUI 程序,避免弹出命令行窗口 ) coll = COLLECT( exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='my_program' # 生成的可执行文件的文件夹 )
解释:
datas
: 用于添加额外的资源文件,比如图片、加密密钥等。excludes
: 用于排除不必要的库,比如tkinter
,matplotlib
,numpy
等。console=False
: 生成 GUI 程序,而不是命令行程序。name
: 指定生成的.exe
文件名称为my_program
。
-
运行 PyInstaller 打包
运行以下命令来打包项目(使用上面写的
.spec
文件):pyinstaller main.spec
这个命令将会生成一个
dist/my_program
文件夹,其中包含打包好的.exe
文件。 -
可选:只生成单个
.exe
文件如果你想将所有文件打包成单个
.exe
文件,可以通过--onefile
选项:pyinstaller --onefile main.spec
-
打包结果
执行完毕后,你会在
dist
文件夹中找到打包好的my_program.exe
文件。
说明:
- 你可以通过
--onefile
选项将所有依赖打包到一个.exe
文件中,这样就不需要额外的文件夹。 - 通过
excludes
参数排除不需要的库可以减小打包后文件的大小,例如排除tkinter
,matplotlib
,numpy
等库,如果这些库不是你项目所需要的。 - 通过
datas
参数包含资源文件(例如密钥文件和图片)到打包的程序中。
完整打包示例:
假设你有一个 main.py
项目文件、一个 secret.key
加密密钥文件、以及一些图像资源文件。你可以通过以下步骤来打包:
pyinstaller --onefile --windowed --add-data "secret.key;." --add-data "resources/*;resources/" --exclude-module tkinter --exclude-module numpy --exclude-module matplotlib main.py
--onefile
: 将所有内容打包成一个.exe
文件。--windowed
: 禁用命令行窗口,仅针对 GUI 程序。--add-data
: 包含额外的资源文件。--exclude-module
: 排除不需要的库,如tkinter
,numpy
,matplotlib
。
完成后,你将在 dist
文件夹中找到 main.exe
,这个文件就是打包后的可执行文件。
停留在世界边缘,与之惜别