PyInstaller简介
PyInstaller是一个用于将Python程序打包为可执行文件的工具。它可以将Python程序打包为Windows、Linux、MacOS等平台的可执行文件,并且可以自动解决Python程序所需的依赖关系,使得打包后的可执行文件可以在没有Python环境的机器上运行。
PyInstaller的主要功能有:
将Python程序打包为可执行文件。
自动检测并打包Python程序所依赖的库和模块。
支持多平台,可以将Python程序打包为Windows、Linux、MacOS等平台的可执行文件。
支持各种Python版本,包括Python2和Python3。
支持多种打包方式,可以将Python程序打包为单个可执行文件、发布包、安装包等。
在Windows下,使用PyInstaller将Python程序打包为exe的步骤如下:
安装PyInstaller及qt相关库
可以使用pip命令安装PyInstaller,打开命令行窗口,输入以下命令:
pip install pyinstaller
安装qt相关部件的代码:
pip install sip
pip install PyQt5 -i https://pypi.douban.com/simple
pip install PyQt5-tools -i https://pypi.douban.com/simpledu.cn/simple
最终版本如下:
1537 INFO: PyInstaller: 5.9.0
1538 INFO: Python: 3.9.0 (conda)
1540 INFO: Platform: Windows-10-10.0.19041-SP0
如果之前误删pip,可用下面的命令装回:
python -m ensurepip
.spec文件简介
PyInstaller生成的.spec文件是用于配置和定制打包过程的脚本文件。它包含了程序的打包信息,如程序的名称、版本、图标等信息,也包含了程序的依赖关系和打包方式等信息。
.spec文件可以手动编写,也可以通过命令行参数让PyInstaller自动生成。在生成.spec文件后,你可以手动编辑.spec文件来对打包过程进行更加详细的配置和定制,例如添加自定义的Python模块、设置程序的图标、指定程序的运行方式等。
使用.spec文件进行打包可以提高打包的灵活性和精度。你可以根据自己的需求对打包过程进行完全的控制,从而生成更加符合你需求的可执行文件。
切换至装有main.py文件的目录:
生成及修改spec文件
用命令pyi-makespec生成spec文件,当程序由多个.py文件组成,故pyi-makespec后跟的是入口py文件:
pyi-makespec main.py
生成test.spec文件
注:如果想将程序的所有内容保存进一个exe文件,则使用命令:
pyi-makespec -F main.py
生成test.spec文件。
main.spec文件内容如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
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,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main',
)
将其中的:
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
更改为:
其中出现的项目py文件所在路径,需要做\斜杠转义:
a = Analysis(
['main.py','demomain.py','image_rc.py','sleepAndLeave.py'],
pathex=["C:\\Users\\104005066\\AlgorithmDemo"],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
同时将:
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
中的 console=改为false。避免弹出黑色的命令行。
生成应用程序
spec文件配置好后,每次修改代码只需执行如下编译命令即可完成上述步骤:
pyinstaller main.spec
生成程序。
注意,如果使用anaconda环境,应把pyinstaller和pyqt装在一个环境内,以免发生找不到包的错误。