一、pyinstaller 打包特别注意事项:
注释掉程序里面的所有pirnt(),否则会会引起程序无法运行或崩溃。
二、pyinstaller 打包方法
1、打包时引用的文件,会自动打包进去,jpeg文件,配置文件等如果需要打包进去,需要在spec里面的datas里面配置。
2、打包命令:pyinstaller -y -D -i ./zy.ico OpenCV_GUI.py,先打包一下py,生成spec文件,参数一定使用—-D
3、然后编辑sepc文件,带入文件 datas=[(‘./haarshare/.xml’,‘./haarshare’),('./.jpeg’,‘./’)]
4、pyinstaller -y -D OpenCV_GUI.spec
说明:datas=[(‘本地路径’,‘打包后的路径’),(‘本地路径’,‘打包后的路径’)],支持通配符
5、本地目录下打包的文件读写,使用以下方法获取绝对路径,base_path=os.path.dirname(os.path.realpath(sys.argv[0]))
6、外面目录的设置参照函数 datadir(),函数功能:选择当前路径前第2级目录(用户目录),下的/Documents/vic_data目录,如果没有该目录则创建该目录。
def datadir(): #设置data目录,文稿下的vic_data
data_dir=os.path.dirname(os.path.realpath(sys.argv[0]))
data_dir=data_dir.split(os.sep)
data_dir=data_dir[:4]
data_dir=os.path.join(data_dir[0],data_dir[1],data_dir[2])
data_dir='/'+data_dir+'/Documents/vic_data'
if not os.path.exists(data_dir):
os.makedirs(data_dir,0o777)
return(data_dir)
7、如果打包后界面字体模糊,spec文件最后,app中加入一行info_plist={‘NSHighResolutionCapable’: ‘True’}
8、spec样本文件
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['XXXX.py'],
pathex=[],
binaries=[],
datas=[('./haarshare/*.xml','./haarshare'),('./*.jpeg','./'),('./readme.md','./')],
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='XXXX',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None , icon='zy.ico')
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='XXXX')
app = BUNDLE(coll,
name='XXXX.app',
icon='./zy.ico',
bundle_identifier=None,
info_plist={'NSHighResolutionCapable': 'True'})