From a8ed4a87b17ae9aebb814ffb81f6d3323864ca84 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 12 Aug 2024 20:59:01 -0700 Subject: [PATCH] ci: add optimized build scripts using Nuitka --- .gitignore | 4 +++- assets/icon.RES | Bin 0 -> 4396 bytes assets/icon.rc | 1 + build_fast.bat | 26 ++++++++++++++++++++++++++ src/imports_and_globals.py | 10 +++++++--- 5 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 assets/icon.RES create mode 100644 assets/icon.rc create mode 100644 build_fast.bat diff --git a/.gitignore b/.gitignore index ef5516b..93e4555 100644 --- a/.gitignore +++ b/.gitignore @@ -24,12 +24,14 @@ src/* docs/* !docs/*.py -# Allow assets folder, but only .svg, .png, and .ico files +# Allow assets folder, but only .svg, .png, .rc and .ico files !assets/ assets/* !assets/*.svg !assets/*.png !assets/*.ico +!assets/*.rc +!assets/*.res # Allow .github folder and its contents !.github/ diff --git a/assets/icon.RES b/assets/icon.RES new file mode 100644 index 0000000000000000000000000000000000000000..6627e353d0f444269d79b4ffcd45219d22129589 GIT binary patch literal 4396 zcmeHLYitzP6+VkgT>`oT2Izo*&9t-i0X_pbjCe4-8lQo|EIzOL2B)g1A0)!T8Q zZb4Ac-PdliqVw`5AO$f?^;7uM{dk94565y_=R|qeF@#+q&Iy&t?i+2pPq;u?YA8Y=>P{RqJss{JT_JKJDy zV|5o%?8QN(f7s|2)&nKEATF=k7*o90I|f%JJ4c&NBu8AIC5PNtd>BLPX}-rz*Ht$J zn0kn+))j=sQGuSSB`X4^Vl_IrLoe(nn8%{P}D5jWJV2OtC;*v6(2ze3}+4Wl`Do zYg%#qIiX@(5_#vA?v(IoTUX*_-Tsd(NF2#-Zn z14HGFpCv}DiG5d{C7nw1d|Gz*P$G7bkR57R!CWC_=C%4^E9(B87jPccLlr~s*3pLY zKZ?$FZ`ZJEUdNCF(AkEB(!7|I?3)9;>Bb(W;qb1sZuu^z0os_Vhq-^Co*cp;G1{aF zsdls{+bL49Z;h$;^|8F;lZ5Ji3<1UVLg9D;!m1s|MN7x7j4txaOx4+4*=kROx6Sdf z53hM)#sp->tO*QQR)(_Ht&yDNc{*o%gch-{g%tBvLa`hP$#z2l3XqW9Peo<>AEL5z zUGPdN?2sRakYN2LE?I<-Y_-G+Rq%FNtKY+Fd;CJp59mQlF)mkqqg|}r)Gm~7Zs*FL ziRNlFVg62T;{8qFXN-U|)>VOwMF=vcV|dn(!83+VoHZT_iI$s`=-^2aJ5NdO_fbte zL&?q?VaawiEZUAE^y0kfT!1&+M76&U7Y#>3qMn{*W-RB{-?x0^T@AHY}XZ-xi zxGz_FF36SIeYq77;~RkLcLIIMS&XM`XK=>;)4fa$5E;YMfwcZwFl)$@q64QT*Ix9V zchaio$BDf6wWxw^4@njg{nxccWXmu7oSyOX`rqI}shZNn{gZy)Vb7fnC{IjPiRa;ESTA&8JKn{3Hh_s_0!5&IGAbi;|FEC)dfM-nK z@uv-t`eg0hb3&q85Rn{@28G6+K(67bYi;|Xm90DM;~QUS<);3>2Bb>V3sh?Ta@qU1 zQvE0)ltG9ub>c$lWjbHCFs9Z6omm6jnay)>#zhlZ*GZCf)#4f3wqVA3G0ZrgK)4%w zT!?18usyv5{MnkIpV6)jO8gK0v>95_cjaSh zUTn>1_XfCHosX+MNl3=|A<;C2o0KrX)n_53ROraTiesc&ewL8SBcxRQtuV?>@6`== z`LS#>#Ih}OP~WpK#(Rpx`C91A{X6e>iAeCXI`FZ&(pI**J1ErtJRs--JK1L-Cf!@} z4h&fUjsm1cbn|0_+LD-PoHO8Zy*-hl?4+dG? zo4dttqk4wT%HM3s9gG)tDo+B%n$09<>>~x^$E0BR2`L&EM8yB@-Y3?2puYw1YqgM+ z-Ngyn`AC;mi;1EEfFc55F>$MBaqHMJO?qsZ|1V=^t}tdU+{UeCg~BcRUqJF0 y!WZVk_*jCnRf$k2ECdfY5MDvBLkp~iiSDU#(!Iv`Z3eo}SbpbLWBe9G1OEg>TK_fx literal 0 HcmV?d00001 diff --git a/assets/icon.rc b/assets/icon.rc new file mode 100644 index 0000000..1fa8fd7 --- /dev/null +++ b/assets/icon.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON "favicon.ico" \ No newline at end of file diff --git a/build_fast.bat b/build_fast.bat new file mode 100644 index 0000000..d1cab2c --- /dev/null +++ b/build_fast.bat @@ -0,0 +1,26 @@ +@echo off + +if "%1"=="" ( + echo Usage: build_fast.bat [RELEASE^|DEV] + exit /b 1 +) + +set COMMON_FLAGS=--standalone --enable-plugin=pyside6 --include-data-dir=assets=assets + +if /I "%1"=="RELEASE" ( + echo Building RELEASE version... + python -m nuitka %COMMON_FLAGS% --windows-console-mode=disable --output-dir=build\release src\main.py --lto=yes +) else if /I "%1"=="DEV" ( + echo Building DEV version... + python -m nuitka %COMMON_FLAGS% --output-dir=build\dev src\main.py +) else ( + echo Invalid argument. Use RELEASE or DEV. + exit /b 1 +) + +if errorlevel 1 ( + echo Build failed. + exit /b 1 +) else ( + echo Build completed successfully. +) diff --git a/src/imports_and_globals.py b/src/imports_and_globals.py index d09b0c2..7566fef 100644 --- a/src/imports_and_globals.py +++ b/src/imports_and_globals.py @@ -57,10 +57,14 @@ def open_file_safe(file_path, mode="r"): def resource_path(relative_path): - try: - # PyInstaller creates a temp folder and stores path in _MEIPASS + if hasattr(sys, "_MEIPASS"): + # PyInstaller path base_path = sys._MEIPASS - except Exception: + elif "__compiled__" in globals(): + # Nuitka path + base_path = os.path.dirname(sys.executable) + else: + # Regular Python path base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)