91 lines
3.3 KiB
RPMSpec
91 lines
3.3 KiB
RPMSpec
# -*- mode: python ; coding: utf-8 -*-
|
|
|
|
from pathlib import Path
|
|
from PyInstaller.utils.hooks import collect_all
|
|
|
|
# 强制收集 PyQt5 全部模块及二进制文件
|
|
qt_datas, qt_binaries, qt_hiddenimports = collect_all('PyQt5')
|
|
|
|
# 只内置 config.json(普通设置)。nodes.json / pac_*.json 属用户数据:
|
|
# 运行时读 %LOCALAPPDATA%\RRPP(首启自动创建模板 / 从 CDN 拉取),不进 EXE。
|
|
_JSON_DATAS = [(str(Path(SPECPATH) / 'config.json'), '.')]
|
|
_TUN_RUNTIME = [
|
|
(str(Path(SPECPATH) / 'runtime' / name), '.')
|
|
for name in ('tun2socks.exe', 'wintun.dll', 'LICENSE.tun2socks.txt',
|
|
'LICENSE.wintun.txt', 'README.txt')
|
|
]
|
|
print(f"[spec] 打包 json 数据文件: {[Path(src).name for src, _ in _JSON_DATAS]}")
|
|
|
|
# 自定义 manifest:普通权限运行 + 声明 PerMonitorV2 DPI 感知,
|
|
# 避免程序在不同缩放比例的显示器之间移动时被 Windows 位图拉伸。
|
|
_MANIFEST = r'''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
|
<assemblyIdentity version="1.0.0.0" name="RRPP_Lite" type="win32"/>
|
|
<description>Royirin Rosmontis Private Proxy Lite</description>
|
|
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
|
<security>
|
|
<requestedPrivileges>
|
|
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
|
</requestedPrivileges>
|
|
</security>
|
|
</trustInfo>
|
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
|
<application>
|
|
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
|
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
|
</application>
|
|
</compatibility>
|
|
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
|
<windowsSettings>
|
|
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor, system</dpiAwareness>
|
|
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
|
|
</windowsSettings>
|
|
</application>
|
|
<dependency>
|
|
<dependentAssembly>
|
|
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
|
|
</dependentAssembly>
|
|
</dependency>
|
|
</assembly>
|
|
'''
|
|
|
|
a = Analysis(
|
|
['main.py'],
|
|
pathex=[],
|
|
binaries=qt_binaries,
|
|
datas=[('ico.ico', '.')] + _JSON_DATAS + _TUN_RUNTIME + qt_datas,
|
|
hiddenimports=qt_hiddenimports,
|
|
hookspath=[],
|
|
hooksconfig={},
|
|
runtime_hooks=[],
|
|
# 排除 Nuitka 构建链相关模块(venv 里装了 Nuitka,但 PyInstaller 产物不需要)
|
|
excludes=['nuitka', 'zstandard', 'ordered_set'],
|
|
noarchive=False,
|
|
optimize=0,
|
|
)
|
|
pyz = PYZ(a.pure)
|
|
|
|
exe = EXE(
|
|
pyz,
|
|
a.scripts,
|
|
a.binaries,
|
|
a.datas,
|
|
[],
|
|
name='Royirin Rosmontis Private Proxy Lite Python',
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=False,
|
|
# UPX 会压缩资源段(含图标),冷缓存下 Explorer 可能提取不到图标导致任务栏空白
|
|
upx=False,
|
|
upx_exclude=[],
|
|
runtime_tmpdir=None,
|
|
console=False,
|
|
disable_windowed_traceback=False,
|
|
argv_emulation=False,
|
|
target_arch=None,
|
|
codesign_identity=None,
|
|
entitlements_file=None,
|
|
icon=['ico.ico'],
|
|
manifest=_MANIFEST,
|
|
)
|