• 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')
    预览

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

  • 相关阅读:
    字符编码
    IO流技术
    TreeMap使用和Comparable比较
    Collections工具类
    使用迭代器进行遍历时
    238. 除自身以外数组的乘积
    python 字典按键、值排序
    collections.Counter用法
    442. 数组中重复的数据
    1395. 统计作战单位数
  • 原文地址:https://www.cnblogs.com/xyou/p/13330453.html
Copyright © 2020-2023  润新知