1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| 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)
|