zoukankan      html  css  js  c++  java
  • pyinstaller利用spec文件打包的使用模板

    pyinstaller打包

    使用pyqt5开发软件,当项目越来越大,引用的资源越来越多时,那么使用pyinstaller进行打包,如果不利用spec文件,是很难满足打包需求的。

    spec文件,其实你在使用 pyinstaller main.py打包时 ,也是会自动生成的,叫main.spec。

    不过,如果你想把自己的资源文件一起打进包去,则需要对spec文件进行一些编辑,然后使用 pyinstaller main.spec即可打包完成。

    pyinstaller 基础常规打包方法,网上文章很多了,大家自己搜索也是一大堆,就不一一列举了。这里推荐一篇,刚学习使用pyinstaller时对我帮助最大的文章,同时在此对这位大神作者表示感谢。

    本文主要就是列举下pyinstaller利用spec文件进行打包的几个使用模板,以供大家参考使用。至于内涵原理,本人时间有限,也没深入研究,大家根据自己情况去探索吧。

    chachezulin

    【如下代码,完全复制,直接运行,即可使用】
    【注1:模板中的相关路径和文件名称,当然需要根据自己的情况对应修改了】
    【注2:如果你的spec文件叫main.spec的话,打包命令便是 pyinstaller main.spec】
    【注3:当项目越来越大时,免安装绿色文件夹 在软件启动速度上,比单个可执行文件,要快!**】

    模式一:使用spec文件,打成【单个可执行文件】

    # -*- mode: python -*-
    
    block_cipher = None
    
    
    a = Analysis(['main.py'],
                 pathex=['D:\PythonProject\mysoft'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    			 
    
    
    
    #######!!!注意点1:加载自己的资源文件#####################
    def extra_datas(mydir):
        def rec_glob(p, files):
            import os
            import glob
            for d in glob.glob(p):
                if os.path.isfile(d):
                    files.append(d)
                rec_glob("%s/*" % d, files)
        files = []
        rec_glob("%s/*" % mydir, files)
        extra_datas = []
        for f in files:
            extra_datas.append((f, f, 'DATA'))
    
        return extra_datas
    
    # append the 'Resources' dir
    a.datas += extra_datas('Resources')    ###这里是自己的资源文件夹		
    a.datas += extra_datas('Reports')	  ###这里是自己的资源文件夹
    a.datas += extra_datas('Drivers')	 ###这里是自己的资源文件夹
    ################################################
    			 
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    
    			 
    exe = EXE(pyz,
              a.scripts,
              a.binaries,                          ###!!!注意点2
              a.zipfiles,                          ###!!!注意点2
              a.datas,                             ###!!!注意点2
              [],
              exclude_binaries=False,   ###!!!注意点3:这里是False
              name='mysoft',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=False,
              icon='d:\mysoft.ico')
    

    模式二:使用spec文件,打成【免安装绿色文件夹】

    # -*- mode: python -*-
    
    block_cipher = None
    
    
    a = Analysis(['main.py'],
                 pathex=['D:\PythonProject\mysoft'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    			 
    
    
    
    #######!!!注意点1:加载自己的资源文件#####################
    def extra_datas(mydir):
        def rec_glob(p, files):
            import os
            import glob
            for d in glob.glob(p):
                if os.path.isfile(d):
                    files.append(d)
                rec_glob("%s/*" % d, files)
        files = []
        rec_glob("%s/*" % mydir, files)
        extra_datas = []
        for f in files:
            extra_datas.append((f, f, 'DATA'))
    
        return extra_datas
    
    # append the 'Resources' dir
    a.datas += extra_datas('Resources')	 ###这里是自己的资源文件夹		
    a.datas += extra_datas('Reports')	 ###这里是自己的资源文件夹	
    a.datas += extra_datas('Drivers')	 ###这里是自己的资源文件夹	
    ################################################
    			 
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    
    			 
    exe = EXE(pyz,
              a.scripts,
              [],
              exclude_binaries=True,   ###!!!注意点3:这里是True
              name='mysoft',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=False,
              icon='d:\mysoft.ico')
    
    
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   name='mysoft')
    

    模式三:使用spec文件,同时打出【单个可执行文件】和【免安装绿色文件夹】

    # -*- mode: python -*-
    
    block_cipher = None
    
    
    a = Analysis(['main.py'],
                 pathex=['D:\PythonProject\mysoft'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    			 
    
    
    
    #######!!!注意点1:加载自己的资源文件#####################
    def extra_datas(mydir):
        def rec_glob(p, files):
            import os
            import glob
            for d in glob.glob(p):
                if os.path.isfile(d):
                    files.append(d)
                rec_glob("%s/*" % d, files)
        files = []
        rec_glob("%s/*" % mydir, files)
        extra_datas = []
        for f in files:
            extra_datas.append((f, f, 'DATA'))
    
        return extra_datas
    
    # append the 'Resources' dir
    a.datas += extra_datas('Resources')	 ###这里是自己的资源文件夹	
    a.datas += extra_datas('Reports')	 ###这里是自己的资源文件夹	
    a.datas += extra_datas('Drivers')	 ###这里是自己的资源文件夹	
    ################################################
    			 
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    
    
    exe1 = EXE(pyz,
              a.scripts,
              a.binaries,                          ###!!!注意点2
              a.zipfiles,                          ###!!!注意点2
              a.datas,                             ###!!!注意点2
              [],
              exclude_binaries=False,   ###!!!注意点3:这里是False
              name='mysoft',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=False,
              icon='d:\mysoft.ico')
    
    			 
    exe2 = EXE(pyz,
              a.scripts,
              [],
              exclude_binaries=True,   ###!!!注意点3:这里是True
              name='mysoft',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              console=False,
              icon='d:\mysoft.ico')
    
    
    coll = COLLECT(exe2,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   name='mysoft')
    预览

    本文如有帮助,敬请留言鼓励。
    本文如有错误,敬请留言改进。

  • 相关阅读:
    Java 泛型 泛型的约束与局限性
    Java 泛型 泛型方法
    Java 泛型 泛型数组
    Java 泛型 协变性、逆变性
    Java 泛型 协变式覆盖和泛型重载
    Java 泛型 泛型代码和虚拟机
    Insertion Sort List
    Remove Duplicates from Sorted List II
    String to Integer (atoi)
    SpringMvc源码入门
  • 原文地址:https://www.cnblogs.com/xyou/p/13330453.html
Copyright © 2011-2022 走看看