【python】py文件全自动打包成spec文件

说明:

自动获取当前根目录下所有py文件生成spec文件,直接运行pyinstaller进行打包即可。直接打包成单执行文件。

直接上代码

import os

pathex = []


def recursion(path, main):
    if path[:1] != '/':
        path += '/'
    listpath = os.listdir(path)
    for item in listpath:
        if os.path.isdir(path + item):
            recursion(path + item, main)
            # print('文件夹',path +item)
        elif os.path.isfile(path + item):
            # if '.py' in item and '.pyc' not in item and '__init__' not in item and '.pyz' not in item and main not in item:
            if '.py' in item and all(i not in item for i in ['.pyc', '__init__', '.pyz','.pyd', main]):
                # print('文件',path +item)
                pathex.append(path + item)
        else:
            print('未知文件', path + item)



def getTxt():
    return """# -*- mode: python ; coding: utf-8 -*-
block_cipher = None


a = Analysis(['${thisMain}.py'],
             pathex=${thisPath},
             binaries=[],
             datas=[],
             hiddenimports=${thisPy},             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,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='Main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

    """

if __name__ == '__main__':
    # 要使用pyinstaller打包的项目路径
    # path = 'E:/pythonProject/test1/pyqt'
    path = os.path.dirname(__file__)
    # 打包项目的入口文件名
    main = 'main'
    recursion(path, main)
    hiddenimports = []
    for i in pathex:
        if i != path:
            # print(i[:i.rindex('/')])
            hiddenimports.append(i.replace(i[:i.rindex('/')], '').replace(i[i.index('.'):], '').replace('/', ''))
    pathexs = []
    pathex.append(path)

    for i in pathex:
        if i != path:
            pathexs.append(i.replace(os.path.abspath(os.path.join(os.getcwd(), "../")), '').replace('/', '\\'))
            continue
        pathexs.append(i.replace('/', '\\'))

    outTxt = getTxt().replace("${thisPy}",f'{hiddenimports}').replace("${thisPath}",f'{pathexs}').replace("${thisMain}",main)
    with open(f"{path}/{main}.spec","w",encoding="utf-8")as f:
        f.write(outTxt)
        f.close()
    exit(0)






打包后的spec文件怎么使用?

直接在terminal窗口执行 pyinstaller 文件名.spec 然后回车即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值