windows pyinstaller打包pytorch程序到exe文件

  • Post author:
  • Post category:其他


主要内容

利用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框架)所遇到的問題


https://medium.com/@exexzxzpo/%E5%98%97%E8%A9%A6%E4%BD%BF%E7%94%A8pyinstaller%E6%89%93%E5%8C%85yolov5%E4%B8%ADdetect-py%E6%96%87%E4%BB%B6-%E5%90%ABpytorch%E6%A1%86%E6%9E%B6-%E6%89%80%E9%81%87%E5%88%B0%E7%9A%84%E5%95%8F%E9%A1%8C-543f5481b304



版权声明:本文为whunamikey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。