使用Pyinstaller打包步骤如下
1. 安装pyinstaller
pip install pyinstaller
查看安装的版本
pyinstaller --version
2. 给脚本加密
pyinstaller myscript.py (主程序文件)
PyInstaller会在您的脚本中找到所有import语句。 它找到导入的模块并在其中查找import语句,依此类推,直到它具有脚本可能使用的完整模块列表。
Pyinstaller能够识别大部分常见的python包,包括GUI库,但是也有些包无法识别或者导入的时候监测不到。这个时候你需要:在spec文件里面指定需要导入的包。
一般操作方法:
你可以先尝试直接运行上面的命令,会自动生成spec文件,默认是放在当前文件夹下,如果成功则不需要修改。如果PyInstaller自动生成的spec文件并不能满足我们的需求。
会报错提示程序依赖我们本地的一些数据文件,这个时候就需要我们自己去编辑spec文件来添加数据文件。
3. 常见spec文件参数
block_cipher = None
a = Analysis(['minimal.py'],
pathex=['/Developer/PItests/minimal'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=None,
runtime_hooks=None,
excludes=None,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,... )
coll = COLLECT(...)
spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.
Analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息
PYZ是一个.pyz的压缩包,包含程序运行需要的所有依赖
EXE根据上面两项生成
COLLECT生成其他部分的输出文件夹,COLLECT也可以没有
4. 常见错误解决方式
ImportError: DLL load failed: 找不到指定的模块
在.spec文件中:
a = Analysis(...
binaries=[('/path/to/some.dll', '.'), ... ],
...)
ModuleNotFoundError: No module named 'xxxxxx'
在.spec文件中:
a = Analysis(...
hiddenimports=['some.module', ... ],
...)
如果我们需要添加没有打包的数据信息,可以将上访的data改为
a.datas +=[(test.ico','D:\Test\python\test.ico','DATA')]
修改后再执行spec文件,即生效添加内容。
pyinstaller test.spec