You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

getSpec.py 3.6 kB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import sys
  2. import os
  3. sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#
  4. from config.config import Config
  5. cfg = Config()
  6. buildPath = 'build' # 存放最终打包成app的相对路径
  7. console = False # 是否展示终端
  8. mainName = 'main.py' # 主程序 main.py
  9. cryptoKey = '0123456789123456' # 对Python字节码加密
  10. appName = cfg.appName # 项目名称
  11. version = cfg.appVersion # 版本号
  12. # spec配置文件 前半部分通用格式
  13. def specFirstPart():
  14. return f'''
  15. # -*- mode: python ; coding: utf-8 -*-
  16. import json
  17. import os
  18. import sys
  19. import PyInstaller.config
  20. # 存放最终打包成app的相对路径
  21. buildPath = '{buildPath}'
  22. PyInstaller.config.CONF['distpath'] = buildPath
  23. # 存放打包成app的中间文件的相对路径
  24. cachePath = os.path.join(buildPath, 'cache')
  25. if not os.path.exists(cachePath):
  26. os.makedirs(cachePath)
  27. PyInstaller.config.CONF['workpath'] = cachePath
  28. # icon相对路径
  29. icoPath = os.path.join('..', '..', 'public', 'logo.ico')
  30. # 项目名称
  31. appName = '{appName}'
  32. # 版本号
  33. version = '{version}'
  34. # 对Python字节码加密
  35. block_cipher = pyi_crypto.PyiBlockCipher(key='{cryptoKey}')
  36. a = Analysis(['../{mainName}'],
  37. pathex=[],
  38. binaries=[],
  39. datas=[('../../dist', 'web')],
  40. hiddenimports=[],
  41. hookspath=[],
  42. hooksconfig={{}},
  43. runtime_hooks=[],
  44. excludes=[],
  45. win_no_prefer_redirects=False,
  46. win_private_assemblies=False,
  47. cipher=block_cipher,
  48. noarchive=False)
  49. pyz = PYZ(a.pure, a.zipped_data,
  50. cipher=block_cipher)
  51. '''
  52. # 打包为一个exe文件
  53. def specPackagePartEXE():
  54. return f'''
  55. exe = EXE(pyz,
  56. a.scripts,
  57. a.binaries,
  58. a.zipfiles,
  59. a.datas,
  60. [],
  61. name=appName,
  62. debug=False,
  63. bootloader_ignore_signals=False,
  64. strip=False,
  65. upx=True,
  66. upx_exclude=[],
  67. runtime_tmpdir=None,
  68. console={console},
  69. disable_windowed_traceback=False,
  70. target_arch=None,
  71. codesign_identity=None,
  72. entitlements_file=None,
  73. icon=icoPath)
  74. '''
  75. # 以文件夹形式存在
  76. def specUnpackagePartEXE():
  77. return f'''
  78. exe = EXE(pyz,
  79. a.scripts,
  80. [],
  81. exclude_binaries=True,
  82. name=appName,
  83. debug=False,
  84. bootloader_ignore_signals=False,
  85. strip=False,
  86. upx=True,
  87. console={console},
  88. disable_windowed_traceback=False,
  89. target_arch=None,
  90. codesign_identity=None,
  91. entitlements_file=None,
  92. icon=icoPath)
  93. coll = COLLECT(exe,
  94. a.binaries,
  95. a.zipfiles,
  96. a.datas,
  97. strip=False,
  98. upx=True,
  99. upx_exclude=[],
  100. name=appName)
  101. '''
  102. # 生成 spec 配置文件
  103. specDir = os.path.dirname(__file__)
  104. # windows.spec
  105. with open(os.path.join(specDir, 'windows.spec'), 'w+', encoding='utf-8') as f:
  106. f.write(specFirstPart() + specPackagePartEXE())
  107. # windows-folder.spec
  108. with open(os.path.join(specDir, 'windows-folder.spec'), 'w+', encoding='utf-8') as f:
  109. f.write(specFirstPart() + specUnpackagePartEXE())
  110. console = True # 是否展示终端
  111. # windows-pre.spec 带终端
  112. with open(os.path.join(specDir, 'windows-pre.spec'), 'w+', encoding='utf-8') as f:
  113. f.write(specFirstPart() + specPackagePartEXE())
  114. # windows-folder-pre.spec
  115. with open(os.path.join(specDir, 'windows-folder-pre.spec'), 'w+', encoding='utf-8') as f:
  116. f.write(specFirstPart() + specUnpackagePartEXE())

No Description