Skip to content

Commit 7cb668c

Browse files
author
Lukas Geiger
committed
build: refresh MethodenAnalyser executable packaging
1 parent 609db7b commit 7cb668c

5 files changed

Lines changed: 109 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ releases/
6060
*.msix
6161
*.appx
6262
*.spec
63+
!MethodenAnalyser.spec
6364
*.pfx
6465
*.p12
6566
*.cer

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/).
55

66
## [Unreleased]
77

8+
### Build / Packaging
9+
- `build_exe.bat` ergänzt einen reproduzierbaren PyInstaller-Build mit lokalem Workpath unter `C:\_Local_DEV\codex_build\methodenanalyser`, zentralem Build-Exclude-Scanner und Kopie der fertigen EXE nach `dist\MethodenAnalyser.exe` sowie `MethodenAnalyser.exe`.
10+
- `START.bat` startet unter Windows bevorzugt die gebaute EXE und fällt erst danach auf den Python-Start zurück.
11+
- `MethodenAnalyser.spec` nutzt relative Projektpfade, bündelt Icon und `locales/` und deaktiviert UPX.
12+
813
### Fehlerbehebungen / Bug Fixes
914
- **B-001** (`translator.py`): `_is_german()` erkannte englische Wörter fälschlich als Deutsch, weil die Zeichenmenge `"aeoeueAeOeUess"` als einzelne ASCII-Zeichen iteriert wurde statt als echte Umlaute. Fix: Prüfung auf `"äöüÄÖÜß"` (Unicode). Regressionstest in `tests/test_cli.py` ergänzt.
1015
- **B-002** (`MethodenAnalyser3.py`): `_collect_unused_import_lines()` markierte `import os.path` nicht zur Entfernung, weil `alias.name` den Wert `"os.path"` liefert, während `unused_set` nur `"os"` enthält. Fix: `alias.name.split(".")[0]`. Regressionstest ergänzt.

MethodenAnalyser.spec

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# -*- mode: python ; coding: utf-8 -*-
2+
3+
from pathlib import Path
4+
5+
6+
project_root = Path(SPECPATH).resolve()
7+
8+
a = Analysis(
9+
[str(project_root / "MethodenAnalyser3.py")],
10+
pathex=[str(project_root)],
11+
binaries=[],
12+
datas=[
13+
(str(project_root / "locales"), "locales"),
14+
(str(project_root / "MethodenAnalyser.ico"), "."),
15+
],
16+
hiddenimports=[],
17+
hookspath=[],
18+
hooksconfig={},
19+
runtime_hooks=[],
20+
excludes=[],
21+
noarchive=False,
22+
optimize=0,
23+
)
24+
pyz = PYZ(a.pure)
25+
26+
exe = EXE(
27+
pyz,
28+
a.scripts,
29+
a.binaries,
30+
a.datas,
31+
[],
32+
name="MethodenAnalyser",
33+
debug=False,
34+
bootloader_ignore_signals=False,
35+
strip=False,
36+
upx=False,
37+
upx_exclude=[],
38+
runtime_tmpdir=None,
39+
console=False,
40+
disable_windowed_traceback=False,
41+
argv_emulation=False,
42+
target_arch=None,
43+
codesign_identity=None,
44+
entitlements_file=None,
45+
icon=str(project_root / "MethodenAnalyser.ico"),
46+
)

START.bat

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ cd /d "%~dp0"
44
set PYTHONIOENCODING=utf-8
55
set PYTHONUTF8=1
66

7+
if exist "dist\MethodenAnalyser.exe" (
8+
start "" "dist\MethodenAnalyser.exe"
9+
exit /b 0
10+
)
11+
12+
if exist "MethodenAnalyser.exe" (
13+
start "" "MethodenAnalyser.exe"
14+
exit /b 0
15+
)
16+
717
where py >nul 2>&1
818
if %ERRORLEVEL%==0 (
919
py -3 "MethodenAnalyser3.py"

build_exe.bat

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
@echo off
2+
setlocal
3+
chcp 65001 >nul
4+
cd /d "%~dp0"
5+
6+
set "PROJECT_ROOT=%CD%"
7+
set "SCANNER=%PROJECT_ROOT%\..\..\_tools\build_exclude_scanner.py"
8+
set "BUILD_ROOT=C:\_Local_DEV\codex_build\methodenanalyser"
9+
set "DIST_DIR=%PROJECT_ROOT%\dist"
10+
11+
if not exist "%SCANNER%" (
12+
echo [FEHLER] Build-Exclude-Scanner nicht gefunden:
13+
echo %SCANNER%
14+
exit /b 1
15+
)
16+
17+
where python >nul 2>&1
18+
if errorlevel 1 (
19+
echo [FEHLER] Python wurde nicht gefunden.
20+
exit /b 1
21+
)
22+
23+
for /f "delims=" %%E in ('python "%SCANNER%" --project "%PROJECT_ROOT%" --emit pyinstaller') do set "EXCLUDES=%%E"
24+
25+
if not exist "%BUILD_ROOT%" mkdir "%BUILD_ROOT%"
26+
if not exist "%DIST_DIR%" mkdir "%DIST_DIR%"
27+
28+
python -m PyInstaller --noconfirm --clean --windowed --onefile ^
29+
--name MethodenAnalyser ^
30+
--icon "%PROJECT_ROOT%\MethodenAnalyser.ico" ^
31+
%EXCLUDES% ^
32+
--distpath "%BUILD_ROOT%\dist" ^
33+
--workpath "%BUILD_ROOT%\build" ^
34+
--specpath "%BUILD_ROOT%" ^
35+
"%PROJECT_ROOT%\MethodenAnalyser3.py"
36+
37+
if errorlevel 1 (
38+
echo [FEHLER] PyInstaller-Build fehlgeschlagen.
39+
exit /b 1
40+
)
41+
42+
copy /Y "%BUILD_ROOT%\dist\MethodenAnalyser.exe" "%DIST_DIR%\MethodenAnalyser.exe" >nul
43+
copy /Y "%BUILD_ROOT%\dist\MethodenAnalyser.exe" "%PROJECT_ROOT%\MethodenAnalyser.exe" >nul
44+
45+
echo [OK] EXE gebaut:
46+
echo %DIST_DIR%\MethodenAnalyser.exe
47+
endlocal

0 commit comments

Comments
 (0)