From 5b04a120e34528afdd0b5d19f3bf07a74d1a31f8 Mon Sep 17 00:00:00 2001 From: duxin Date: Tue, 14 Jul 2026 15:15:03 +0800 Subject: [PATCH] chore: replace app icon uitubiao.ico -> app.ico (converted from app.png) --- data/icons-1/app.ico | Bin 0 -> 64232 bytes src/gui/water_quality_gui_v2.py | 2 +- water_quality_app.spec | 225 ++++++++++++++++++++++++++++++++ 3 files changed, 226 insertions(+), 1 deletion(-) create mode 100644 data/icons-1/app.ico create mode 100644 water_quality_app.spec diff --git a/data/icons-1/app.ico b/data/icons-1/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..a5cc4a73fd926561279f3c09c74da82020ab3ad2 GIT binary patch literal 64232 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 literal 0 HcmV?d00001 diff --git a/src/gui/water_quality_gui_v2.py b/src/gui/water_quality_gui_v2.py index dae12e7..e602d62 100644 --- a/src/gui/water_quality_gui_v2.py +++ b/src/gui/water_quality_gui_v2.py @@ -336,7 +336,7 @@ class WaterQualityGUI(QMainWindow): ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(my_appid) super().__init__() - icon_path = get_resource_path("data/icons-1/uitubiao.ico") + icon_path = get_resource_path("data/icons-1/app.ico") self.setWindowIcon(QIcon(icon_path)) # 第一步:创建各 Manager(纯连线,不执行业务) diff --git a/water_quality_app.spec b/water_quality_app.spec new file mode 100644 index 0000000..91df30a --- /dev/null +++ b/water_quality_app.spec @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +# ============================================================================== +# 水质参数反演分析系统 - 终极纯净版 PyInstaller Spec 配置文件 +# 彻底斩断 venv 交叉污染,强制 Conda 原生环境全量解析 +# 用法: pyinstaller --clean water_quality_app.spec +# ============================================================================== +import os +import sys +import glob +import shutil + +block_cipher = None + +# ============================================================================== +# 0. 基础路径配置 (❌ 彻底移除了 VENV_SITE 变量,拒绝交叉环境污染!) +# ============================================================================== +PROJECT_ROOT = os.path.abspath(os.getcwd()) +SRC_DIR = os.path.join(PROJECT_ROOT, "src") +BUILD_DIR = os.path.join(PROJECT_ROOT, "build") +DIST_DIR = os.path.join(PROJECT_ROOT, "dist") + +# Conda WQ_GUI 环境 DLL 路径(MSVC 运行时 + GIS 核心库原生纯净副本) +CONDA_ENV_DLLS = r"D:\111\changyongruanjian\anconda\envs\WQ_GUI" +CONDA_OSGEO_DLLS = os.path.join(CONDA_ENV_DLLS, "Lib", "site-packages", "osgeo") + +# ============================================================================== +# 1. 静态资源与数据文件收集 (datas) +# ============================================================================== +def get_data_files(): + datas = [] + + # 1-1. 根目录核心配置文件 (包含内置公式 CSV) + single_files = [ + "waterindex.csv", + "requirements.txt", + "README.md", + "软件说明.md", + ] + for f in single_files: + if os.path.exists(os.path.join(PROJECT_ROOT, f)): + datas.append((os.path.join(PROJECT_ROOT, f), ".")) + + # 1-2. data/ 目录(全量递归映射,确保代码通过 get_resource_path 能读到任务栏图标) + data_dir = os.path.join(PROJECT_ROOT, "data") + if os.path.isdir(data_dir): + datas.append((data_dir, "data")) + + # 1-3. src/gui/model/ 模型参数文件 + model_dir = os.path.join(SRC_DIR, "gui", "model") + if os.path.isdir(model_dir): + datas.append((model_dir, "src/gui/model")) + + # 1-4. src/auth/ 离线授权验证模块 + auth_dir = os.path.join(SRC_DIR, "auth") + if os.path.isdir(auth_dir): + datas.append((auth_dir, "src/auth")) + + # 1-5. 运行时环境变量与 DLL 挂载钩子 + rthook_script = os.path.join(PROJECT_ROOT, "scripts", "rthook_add_dll_dirs.py") + if os.path.exists(rthook_script): + datas.append((rthook_script, "scripts")) + + return datas + +datas = get_data_files() + +# ============================================================================== +# 2. 核心二进制文件搜集 (binaries) - 强制抓取纯净运行库防静默崩溃 +# ============================================================================== +def get_binaries(): + binaries = [] + + # 2-1. 精准提取 Conda 环境下与编译完全匹配的 MSVC 运行库 + if os.path.isdir(CONDA_ENV_DLLS): + for dll_name in [ + "msvcp140.dll", + "msvcp140_1.dll", + "msvcp140_2.dll", + "msvcp140_atomic_wait.dll", + "msvcp140_codecvt_ids.dll", + "vcruntime140.dll", + "vcruntime140_1.dll", + "vcruntime140_threads.dll", + "concrt140.dll", + "vcomp140.dll", + "vcamp140.dll", + "vccorlib140.dll", + ]: + dll_path = os.path.join(CONDA_ENV_DLLS, dll_name) + if os.path.exists(dll_path): + binaries.append((dll_path, ".")) + + # 2-2. 搜集底层 GDAL/GEOS/PROJ 核心框架与二进制扩展 + if os.path.isdir(CONDA_OSGEO_DLLS): + for dll_name in ["gdal.dll", "geos.dll", "geos_c.dll", "proj_9.dll"]: + dll_path = os.path.join(CONDA_OSGEO_DLLS, dll_name) + if os.path.exists(dll_path): + binaries.append((dll_path, ".")) + + # 映射 Python 3.12 对应的底层二进制接口 (C-Extension) + for pyd_name in [ + "_gdal.cp312-win_amd64.pyd", + "_gdal_array.cp312-win_amd64.pyd", + "_gdalconst.cp312-win_amd64.pyd" + ]: + pyd_path = os.path.join(CONDA_OSGEO_DLLS, pyd_name) + if os.path.exists(pyd_path): + binaries.append((pyd_path, "osgeo")) + + return binaries + +binaries = get_binaries() + +# ============================================================================== +# 3. 隐式依赖与底层动态加载池 (hiddenimports) +# ============================================================================== +hidden_imports = [ + "PyQt5.sip", + # GDAL 空间处理核心 + "osgeo", "osgeo.gdal", "osgeo.gdalconst", "osgeo.gdalnumeric", "osgeo.ogr", "osgeo.osr", + # 解决 rasterio 与 fiona 二进制隐藏扩展的断层报错 + "rasterio._base", "rasterio._env", "rasterio._io", "rasterio._warp", + "rasterio._features", "rasterio._path", "rasterio.crs", "rasterio.env", + "rasterio.features", "rasterio.warp", "rasterio.windows", "rasterio.sample", "rasterio.vrt", + "fiona._env", "fiona._geometry", "fiona.ogrext", "fiona.io", "fiona.env", "fiona.features", + # 几何计算与坐标转换 + "shapely._geos", "shapely._geometry", "shapely.lib", + "pyproj", "pyproj._datadir", "pyproj._crs", + "geopandas", "geopandas._compat", "geopandas.io", + # 底层科学计算库支持 + "scipy.special._orthogonal", "scipy.spatial", "scipy.linalg", + "sklearn.utils._index_deprecations", "sklearn.utils._testing", "sklearn._loss", + "sklearn.ensemble", "sklearn.preprocessing", "sklearn.model_selection", + # 报告与文档导出组件 + "docx", "docx.oxml", "docx.table", "docx.text", + "lxml.etree", "lxml.objectify", + # 业务面板与自定义挂载 + "src.gui.styles", "src.gui.components.custom_widgets", +] + +# ============================================================================== +# 4. 运行时前置初始化钩子 (runtime_hooks) +# ============================================================================== +runtime_hooks = [] +rthook_path = os.path.join(PROJECT_ROOT, "scripts", "rthook_add_dll_dirs.py") +if os.path.exists(rthook_path): + runtime_hooks.append(rthook_path) + +# ============================================================================== +# 5. 精简排除列表 (excludes) - 严格保留标准库防级联瘫痪 +# ============================================================================== +excludes = [ + "tkinter", + "matplotlib.tests", + "PyQt5.QtTest", + "PyQt5.QtWebEngine", + "PyQt5.QtWebEngineWidgets", + "pytest", +] + +# ============================================================================== +# 6. 核心构建流程 (Analysis -> PYZ -> EXE -> COLLECT) +# ============================================================================== +appname = "MegaWater" + +a = Analysis( + ["src/gui/water_quality_gui_v2.py"], + # ⚠️ 绝对关键:仅保留项目原生搜索路径,彻底切断与混合虚拟环境的联系 + pathex=[PROJECT_ROOT, SRC_DIR], + binaries=binaries, + datas=datas, + hiddenimports=hidden_imports, + hookspath=["scripts"] if os.path.isdir(os.path.join(PROJECT_ROOT, "scripts")) else [], + hooksconfig={}, + runtime_hooks=runtime_hooks, + excludes=excludes, + win_no_prefer_redirects=False, + cipher=block_cipher, + noarchive=False, +) + +# 强制清洗可能由于第三方包引入导致的、存在版本冲突的残缺 MSVC 动态库 +a.binaries = [ + x for x in a.binaries + if not x[0].lower().startswith(('msvcp140', 'vcruntime140')) +] + +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +# 生成物理启动核心 +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name=appname, + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=False, # 禁用 UPX 暴力压缩,保护二进制 C++ 区段完整性 + console=False, # ⚠️ 维持开启控制台,拒绝绝对静默崩溃 + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon="data/icons-1/app.ico", # 锁定物理执行文件桌面正方形主图标 +) + +# 组装最终绿色分发目录 (_internal + EXE) - 引入全自动纯净 DLL 填坑机制 +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + # 强制将原生编译的底层运行库塞入分发根目录,终结指针断层! + [ + ('msvcp140.dll', os.path.join(CONDA_ENV_DLLS, 'msvcp140.dll'), 'BINARY'), + ('vcruntime140.dll', os.path.join(CONDA_ENV_DLLS, 'vcruntime140.dll'), 'BINARY') + ], + strip=False, + upx=False, + upx_exclude=[], + name=appname, +) \ No newline at end of file