diff --git a/Makefile b/Makefile index 819226f..007285a 100644 --- a/Makefile +++ b/Makefile @@ -5,27 +5,30 @@ help: @echo "海上风电场集电线路设计优化系统 - 构建脚本" @echo "" @echo "可用命令:" - @echo " make build - 使用 .spec 文件生成单文件 exe 程序" + @echo " make build - 使用 .spec 文件生成单文件 exe 程序 (包含自动版本号生成)" @echo " make rebuild - 清理并重新构建" - @echo " make clean - 清理构建生成的临时文件和缓存" + @echo " make clean - 清理编译生成的临时文件和缓存" @echo " make help - 显示此帮助信息" # 生成单文件exe程序 -# 使用 --clean 清理 PyInstaller 缓存,-y 自动覆盖输出 +# 使用 nicegui-pack 打包 build: - @echo "开始打包程序..." - uv run pyinstaller --clean -y "海上风电场集电线路设计优化系统.spec" - @echo "打包完成!" - @echo "可执行文件位于: dist/海上风电场集电线路设计优化系统.exe" + @echo "正在生成版本信息..." + uv run python make_version.py + @echo "开始构建程序..." + uv run nicegui-pack --onefile --windowed --name "海上风电场集电线路设计优化系统" --add-data "version.py:." gui.py + @echo "正在重命名文件..." + @uv run python -c "import os, shutil; from version import VERSION; src='dist/海上风电场集电线路设计优化系统.exe'; dst=f'dist/海上风电场集电线路设计优化系统_{VERSION}.exe'; shutil.move(src, dst); print(f'已重命名为: {dst}')" + @echo "构建完成!" -# 清理构建生成的临时文件 +# 清理编译生成的临时文件 clean: @echo "正在清理临时文件..." @uv run python -c "import shutil, pathlib; [shutil.rmtree(p) for p in pathlib.Path('.').rglob('__pycache__')]; shutil.rmtree('build', ignore_errors=True); shutil.rmtree('dist', ignore_errors=True)" @echo "清理完成!" + nice: uv run nicegui-pack --onefile --name "海上风电场集电线路设计优化系统" gui.py --onefile --windowed - # 清理并重新构建 -rebuild: clean build \ No newline at end of file +rebuild: clean build diff --git a/build.spec b/build.spec new file mode 100644 index 0000000..dc92cb4 --- /dev/null +++ b/build.spec @@ -0,0 +1,87 @@ +# -*- mode: python ; coding: utf-8 -*- + +import sys +from PyInstaller.utils.hooks import collect_data_files, collect_submodules + +# 鏀堕泦鎵鏈夐渶瑕佺殑鏁版嵁鏂囦欢 +datas = [] +datas += collect_data_files('matplotlib') +datas += collect_data_files('nicegui') +datas += collect_data_files('networkx') +datas += collect_data_files('scipy') +datas += collect_data_files('sklearn') +datas += collect_data_files('pandas') + +# 鏀堕泦鎵鏈夐殣钘忓鍏 +hiddenimports = [] +hiddenimports += collect_submodules('matplotlib') +hiddenimports += collect_submodules('nicegui') +hiddenimports += collect_submodules('networkx') +hiddenimports += collect_submodules('scipy') +hiddenimports += collect_submodules('sklearn') +hiddenimports += collect_submodules('pandas') +hiddenimports += collect_submodules('numpy') + +# 娣诲姞鐗瑰畾鐨勯殣钘忓鍏 +hiddenimports += [ + 'matplotlib.backends.backend_qt5agg', + 'matplotlib.backends.backend_tkagg', + 'matplotlib.backends.backend_agg', + 'matplotlib.backends.backend_svg', + 'PIL._tkinter_finder', + 'openpyxl', + 'ezdxf', + 'scipy.spatial._qhull', + 'scipy.special._cdflib', + 'scipy.linalg.cython_lapack', + 'scipy.linalg.cython_blas', + 'sklearn.utils._cython_blas', + 'sklearn.neighbors._partition_nodes', + 'sklearn.tree._utils', + 'pandas._libs.tslibs.nattype', + 'pandas._libs.tslibs.np_datetime', + 'pandas._libs.skiplist', +] + +block_cipher = None + +a = Analysis( + ['gui.py'], + pathex=[], + binaries=[], + datas=datas, + hiddenimports=hiddenimports, + hookspath=[], + hooksconfig={}, + 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='娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon=None, +) \ No newline at end of file diff --git a/gui.py b/gui.py index 3e51f18..7834cb2 100644 --- a/gui.py +++ b/gui.py @@ -16,6 +16,12 @@ from main import ( ) import pandas as pd +# 灏濊瘯瀵煎叆鑷姩鐢熸垚鐨勭増鏈彿 +try: + from version import VERSION +except ImportError: + VERSION = "v1.0" + # 璁剧疆matplotlib鏀寔涓枃鏄剧ず plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei", "Arial"] plt.rcParams["axes.unicode_minus"] = False @@ -834,7 +840,7 @@ def index(): "bg-primary text-white p-4 shadow-lg items-center no-wrap" ): with ui.column().classes("gap-0"): - ui.label("娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁 v1.0").classes( + ui.label(f"娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁 {VERSION}").classes( "text-2xl font-bold" ) with ui.column().classes("gap-0"): diff --git a/浣跨敤璇存槑/浣跨敤璇存槑.md b/浣跨敤璇存槑/浣跨敤璇存槑.md index 5469583..1552242 100644 --- a/浣跨敤璇存槑/浣跨敤璇存槑.md +++ b/浣跨敤璇存槑/浣跨敤璇存槑.md @@ -8,6 +8,8 @@ ## 1. 杞欢姒傝堪 +娴蜂笂椋庣數闆嗙數绾胯矾浣滀负椋庣數鏈虹粍涓庢捣涓婂崌鍘嬬珯鐨勫叧閿繛鎺ョ航甯︼紝鍏朵紭鍖栬璁″鎻愬崌椋庣數鍦哄叏鐢熷懡鍛ㄦ湡缁忔祹鎬у強闄嶄綆鐜褰卞搷鍏锋湁鏍稿績鎰忎箟锛屼笉浠呰兘閫氳繃鎷撴墤涓庤矾鐢变紭鍖栧噺灏戝缓璁捐繍缁存垚鏈侀檷浣庣嚎璺崯鑰楋紝杩樿兘涓烘繁杩滄捣銆佸ぇ瀹归噺椋庣數鍦哄紑鍙戞彁渚涙妧鏈敮鎾戙傝浼樺寲宸ヤ綔闈复鎷撴墤涓庤浇娴侀噺澶氱害鏉熻﹀悎鐨勬妧鏈摱棰堬紝闇缁煎悎杩愮敤鏁板瓧鍖栨妧鏈佸厛杩涗紭鍖栫畻娉曡繘琛屽簲瀵广 + 鏈蒋浠朵笓涓烘捣涓婇鐢靛満鍐呴泦鐢电郴缁燂紙35kV/66kV/110kV锛夎璁★紝鏃ㄥ湪閫氳繃澶氱鍏堣繘鐨勬嫇鎵戜紭鍖栫畻娉曪紙濡侲sau-Williams銆丮ST銆佹棆杞壂鎻忔硶锛夛紝杈呭姪鐢垫皵宸ョ▼甯堝揩閫熷畬鎴愰泦鐢电嚎璺殑璺緞瑙勫垝涓庣粡娴庢ф瘮閫夈 杞欢鑳藉鏍规嵁椋庢満鍧愭爣銆佹捣缂嗚浇娴侀噺鍙婇犱环鏁版嵁锛岃嚜鍔ㄨ绠楀苟鐢熸垚绾挎崯鏈灏忋佹姇璧勬渶浼樼殑鎺ョ嚎鏂规锛屽苟鏀寔涓閿鍑 CAD 鍥剧焊鍜屾捣缂嗛暱搴︺ @@ -141,7 +143,7 @@ ### 5.2 瀵煎嚭 Excel 鎶ュ憡 鐐瑰嚮 **鈥滀笅杞 Excel 瀵规瘮琛ㄢ**锛屽皢鐢熸垚涓浠藉寘鍚缁嗗伐绋嬫暟鎹殑 Excel 鏂囦欢锛屽唴瀹瑰寘鎷細 * **Summary**: 鎵鏈夋柟妗堢殑缁忔祹鎶鏈寚鏍囨眹鎬汇 -* **Details**: 鎺ㄨ崘鏂规鐨勬瘡涓鏉℃捣缂嗚繛鎺ユ槑缁嗭紙璧风偣銆佺粓鐐广侀暱搴︺佸瀷鍙枫佽礋杞界巼锛夈 +* **Details**: 鎺ㄨ崘鏂规鐨勬瘡涓鏉℃捣缂嗚繛鎺ユ槑缁嗭紙璧风偣銆佺粓鐐广侀暱搴︺佸瀷鍙凤級銆 ### 5.3 鎵归噺褰掓。 鐐瑰嚮 **鈥滃鍑哄叏閮ㄦ柟妗 DXF (ZIP)鈥**锛屽彲灏嗘墍鏈夎绠椾骇鐢熺殑鏂规鍥剧焊鍜屾姤琛ㄦ墦鍖呬笅杞斤紝渚夸簬椤圭洰褰掓。銆 diff --git a/娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁.spec b/娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁.spec new file mode 100644 index 0000000..241199f --- /dev/null +++ b/娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['gui.py'], + pathex=[], + binaries=[], + datas=[('D:\\code\\windfarm\\.venv\\Lib\\site-packages\\nicegui', 'nicegui'), ('version.py', '.')], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='娴蜂笂椋庣數鍦洪泦鐢电嚎璺璁′紭鍖栫郴缁', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +)