pyinstaller打包带资源文件的python项目
最近用wxpython写了一个桌面项目,准备用PyInstaller打包成.exe程序,之前尝试过用cx-freeze打包,但是由于项目中包含图片等资源文件,cx-freeze找不到理想的解决办法,于是改用PyInstaller。这里将使用过程记录下来。
安装PyInstaller
pip install pyinstaller
(如果网络太慢导致依赖安装失败,可以关掉科学上网工具)
使用方法
无资源文件打包
pyinstaller -F your_project.py
然后会生成build和dist文件夹,dist文件夹下有一个.exe文件,就是程序的可执行文件。
-F 参数:生成单个.exe文件,不加的话就会生成一堆文件
有资源文件打包
首先生成your_project.spec文件
pyi-makespec -w your_project.py
-w参数:运行.exe程序不会出现dos窗口
打开your_project.spec文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['MainApp.py'],
pathex=['C:\\Users\\R2D2\\Desktop\\HZXB_App'],
binaries=[],
datas=[],
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,
[],
exclude_binaries=True,
name='MainApp',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='MainApp')
其中datas=[]中就是要包含的资源文件的路径(‘资源路径/资源名’, ‘资源打包后相对exe的路径’),例如(在windows下操作,所以路径分隔符是双斜):
datas=[('Icons\\add.png', 'Icons'), ('Icons\\slgs.png', 'Icons') ]
spec文件修改完后,按照以上spec文件的配置执行打包命令:
pyinstaller your_project.spec
打包完成后就可以在dist\MainApp\Icons\文件夹下看到资源文件。
spec文件中exe = EXE(…)里有一项
console=False,就是加了参数-w后的结果,这里应该可以手动修改(未尝试)如果要打包的程序包含有资源文件,那么不能加-F参数,因为如果只生成单个exe文件的,资源文件是无法访问的。(解决办法应该可以将图片这些资源文件转为.py文件,未尝试)