Repository navigation
Expand file tree
/
Copy pathbuild.py
More file actions
69 lines (60 loc) · 3.02 KB
/
Copy pathbuild.py
File metadata and controls
69 lines (60 loc) · 3.02 KB
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
from __future__ import annotations
import os
import sys
from PyInstaller.__main__ import run
def main() -> None:
"""按平台打包应用,并为 macOS 配置 Sparkle 与最终签名。"""
# 确定当前操作系统
system = sys.platform
# Windows 使用分号 ; 作为路径分隔符,Unix/Linux/macOS 使用冒号 :
path_sep = ';' if system == 'win32' else ':'
print(f"正在为 {system} 平台打包 XJTUToolBox...")
# 1. 打包主程序 app.py
# 对应命令: pyinstaller --windowed --name XJTUToolbox ... app.py
app_args = [
'app.py', # 目标脚本
'--windowed', # 无控制台窗口
'--name=XJTUToolbox', # 可执行文件名称
'--collect-datas=fake_useragent', # 收集 fake_useragent 数据
'--icon=assets/icons/main_icon.ico', # 图标
f'--add-data=assets{path_sep}assets', # 添加资源文件夹
f'--add-data=jwxt/templates{path_sep}jwxt/templates', # 添加模板文件夹
f'--add-data=notification/sources.json{path_sep}notification', # 通知来源注册表
'--noconfirm', # 覆盖输出目录不询问
'--clean', # 清理缓存
]
# 添加平台特定的 hidden-import
if system == 'win32':
app_args.append('--hidden-import=plyer.platforms.win.notification')
elif system == 'darwin':
app_args.append('--hidden-import=plyer.platforms.macosx.notification')
app_args.extend(['--hidden-import=objc', '--hidden-import=Foundation', '--hidden-import=AppKit'])
# 提前失败,避免产出没有公钥、无法更新的发行包。
from scripts.sparkle_common import validate_public_key
validate_public_key(os.environ['SPARKLE_PUBLIC_KEY'])
if not os.environ.get('MACOS_BUILD_NUMBER', '').isdecimal():
raise ValueError('Set MACOS_BUILD_NUMBER to a positive, increasing integer')
elif system == 'linux':
app_args.append('--hidden-import=plyer.platforms.linux.notification')
print(">>> 开始打包主程序...")
run(app_args)
if system == 'darwin':
from scripts.sparkle_build import configure_bundle
configure_bundle()
# 2. (仅 Windows) 打包更新程序 updater.py
# 对应命令: pyinstaller -F --distpath ./dist/XJTUToolbox ... updater.py
if system == 'win32':
print(">>> 开始打包更新程序 (Windows)...")
updater_args = [
'updater.py',
'-F', # 单文件模式
'--distpath=./dist/XJTUToolbox', # 输出目录 (与主程序放在一起)
'--name=XJTUToolbox Updater', # 名称
'--icon=assets/icons/updater_icon.ico', # 图标
'--noconfirm',
'--clean',
]
run(updater_args)
print("\n所有打包任务已完成!")
if __name__ == '__main__':
main()