PyInstaller是一款将 .py 文件转为 .exe 文件的软件

安装 PyInstaller

使用pip命令安装

1
pip install pyinstaller

使用 PyInstaller

基本使用

PyInstaller工具的命令语法如下

1
pyinstaller 选项 Python文件

常用的pyinstaller选项

选项 作用
-h, --help 查看 PyInstaller 选项的详细信息
-F, -onefile 产生单个的可执行文件
-D, --onedir 产生一个目录(包含多个文件)作为可执行程序
-a, --ascii 不包含 Unicode 字符集支持
-d, --debug 产生 debug 版本的可执行文件
-w, --windowed, --noconsole 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c, --console, --nowindowed 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR, --out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR, --path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME, --name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
-i, --icon <FILE.ico 或 FILE.exe,ID 或 FILE.icns 或 “NONE”> FILE.ico: apply that icon to a Windows executable
FILE.exe,ID, extract the icon with ID from an exe
FILE.icns: apply the icon to the .app bundle on Mac OS X
Use “NONE” to not apply any icon, thereby making the OS to show some default (default: apply PyInstaller’s icon)
–uac-admin 使打包后的exe文件请求管理员权限(仅对 Windows 有效)

1
pyinstaller -F -w -i file.ico main.py

运行结束后可在 dist 目录中找到生成的 main.exe

打包多个资源文件到一个可执行文件

假设 main.py 调用 small.ico 文件
main.py 中添加下列函数

1
2
3
def resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)

main.pysmall.ico 在同一目录时,在 main.py 中通过下面的代码获得 small.ico 的路径

1
small_ico = resource_path(os.path.join('small.ico'))

small.ico 位于子目录 ico 中时,在 main.py 中通过下面的代码获得 small.ico 的路径

1
small_ico = resource_path(os.path.join('ico', 'small.ico'))

下面开始打包

1
pyinstaller -F -w main.py

打包完成后删除生成的 __pycache__builddist 文件夹
然后打开 main.spec 文件
在datas目录中增加一个元组,如:
main.pysmall.ico 在同一目录: datas=[('small.ico', '.')],
small.ico 位于子目录 ico 中: datas=[('ico', 'ico')],

然后再次打包

1
pyinstaller -F -w main.spec

运行结束后可在 dist 目录中找到生成的 main.exe