主要内容
利用pyinstaller将pytorch代码打包成exe其实含有比较多大的坑,这篇文章主要记录最近在项目中打包exe遇到的一些问题,由于问题主要是opencv和pytorch带来的,解决的办法和minist的pytorch程序差不多,这个minist程序我已经测试过,能够打包成功,并在没有python环境的电脑上成功运行:
https://github.com/1240117300/MINIST
。
出坑技巧一:安装匹配的包版本
这是虚拟环境中的安装包及对应的版本号,这张表就能差不多解决问题了,很多奇奇怪怪的问题,查了一堆资料之后,发现换一个包的版本就解决了。
出坑技巧二:从干净的虚拟环境中,只安装需要的包,能够有效减小打包文件的大小,并提高打包速度
这些安装目录在百度磁盘有,下载之后能够快速的部署深度学习环境
出坑技巧三:编写好spec文件
# -*- mode: python ; coding: utf-8 -*-
import sys
import os.path as osp
sys.setrecursionlimit(5000)
block_cipher = None
a = Analysis(['airway_seg.py'],
pathex=['E:\\MikeyNa\\pycode\\airtree_seg_xajd\\airway_deploy','E:\\MikeyNa\\pycode\\airtree_seg_xajd\\airway_deploy\\preprocessing','D:\\deeplearning\\Anaconda3\\envs\\airway_deploy\\Lib\\site-packages'],
binaries=[],
datas=[('baseline_fr_ad.ckpt','baseline_fr_ad.ckpt')],
hiddenimports=['pydicom','models','preprocessing','full_prep','baseline_fr','data','option','prepare','split_combine_mj','trainval_classifier','utils'],
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='airway_seg',
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 )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='airway_seg')
出坑技巧四:从坑里爬出来,下面记录一些我遇到遇到的具体坑和解决办法
Multiprocessing error
windows下,当代码引入multiprocessing模块并使用pyinstaller打包时,会遇到exe死锁状态
原因:windows下multiprocessing模块设置有问题,在linux下没有这个问题,解决办法
from multiprocessing import freeze_support
if __name__ == '__main__':
start_time = time.time()
freeze_support()
main()
end_time = time.time()
print('end airway segmentation, time %d seconds' % (end_time - start_time))
参考链接
使用pyinstaller打包多文件和目录的Python项目 – 是勇哥呀 – 博客园
总结使用pyinstaller打包pyqt5以及pytorch的各种坑_Nie_Hen的博客-CSDN博客_pyinstaller torch
嘗試使用Pyinstaller打包yolov5中detect.py文件(含pytorch框架)所遇到的問題