pyinstaller利用spec文件打包的使用模板

pyinstaller打包

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

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

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

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

《pyinstaller的使用python 打包程序》

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

【如下代码,完全复制,直接运行,即可使用】
【注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')

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

  • 14
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
使用pyinstaller进行打包时,可以通过以下步骤生成.spec文件: 1. 首先,使用命令`pyinstaller -F -w xxx.py`来生成一个可执行的exe文件。 2. 然后,修改上一步生成的xxx.spec文件,添加资源文件。在.spec文件中,可以指定需要包含的资源文件,例如图标文件等。 3. 最后,使用命令`pyinstaller xxx.spec`来将.spec文件打包为exe文件。 需要注意的是,上述步骤中的xxx.py是指要打包的Python源码文件,而xxx.spec是由pyinstaller生成的配置文件。在生成的.spec文件中,可以根据需要进行修改和配置,以满足特定的打包需求。 你可以参考pyinstaller的官方文档和官方网站,了解更多关于pyinstaller的详细信息和常用命令。\[1\]\[2\] 在打包时,可以根据需要选择不同的打包方式。常用的几种打包方式包括: - `pyinstaller -F -i ./test.ico --key 035634 test.py`:配置图标和防反编译打包。 - `pyinstaller -F -i ./test.ico test.py`:配置图标。 - `pyinstaller -F test.py`:默认打包方式,将源码文件打包成一个exe文件。 这些命令可以根据实际需求进行选择和使用。\[3\] #### 引用[.reference_title] - *1* [Pyinstaller打包spec添加资源文件,亲测可用](https://blog.csdn.net/THMAIL/article/details/106168362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [pyinstaller 多(单)文件打包流程【打包、防止反编译 快速上手教程】 ,附使用.spec打包时,增加--key命令...](https://blog.csdn.net/qq_41999731/article/details/124245642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值