- Re-ajoute --nofollow-import-to pour tous les packages externes lourds (onnxruntime, numpy, transformers, PIL, fitz, pdfplumber, etc.) - Ajoute --no-deployment-flag=excluded-module-usage pour autoriser leur import à l'exécution - Nouvelle étape : pip install --target=dist pour copier les packages Python directement dans le dossier de distribution - Nuitka ne compile en C que nos 4 modules + stdlib + tkinter - Les packages externes restent en bytecode Python natif (fiable) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
108 lines
3.9 KiB
YAML
108 lines
3.9 KiB
YAML
name: Build Windows EXE (Nuitka)
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
build-windows:
|
|
runs-on: windows-latest
|
|
timeout-minutes: 90
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
cache: pip
|
|
|
|
- name: Cache Nuitka
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~\AppData\Local\Nuitka\Nuitka
|
|
nuitka-build-cache
|
|
key: nuitka-${{ runner.os }}-${{ hashFiles('requirements.txt', 'Pseudonymisation_Gui_V5.py') }}
|
|
restore-keys: nuitka-${{ runner.os }}-
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip setuptools wheel
|
|
pip install -r requirements.txt
|
|
pip install nuitka zstandard
|
|
|
|
- name: Download NER model
|
|
run: |
|
|
python -c "from ner_manager_onnx import NerModelManager; m=NerModelManager(cache_dir='models'); m.load('cmarkea/distilcamembert-base-ner'); print('Model OK:', m.is_loaded()); m.unload()"
|
|
|
|
- name: Build with Nuitka (standalone folder)
|
|
run: |
|
|
python -m nuitka `
|
|
--standalone `
|
|
--enable-plugin=tk-inter `
|
|
--include-module=anonymizer_core_refactored_onnx `
|
|
--include-module=ner_manager_onnx `
|
|
--include-module=eds_pseudo_manager `
|
|
--include-data-dir=config=config `
|
|
--include-data-dir=models=models `
|
|
--nofollow-import-to=onnxruntime `
|
|
--nofollow-import-to=numpy `
|
|
--nofollow-import-to=transformers `
|
|
--nofollow-import-to=optimum `
|
|
--nofollow-import-to=tokenizers `
|
|
--nofollow-import-to=sentencepiece `
|
|
--nofollow-import-to=torch `
|
|
--nofollow-import-to=PIL `
|
|
--nofollow-import-to=pdfplumber `
|
|
--nofollow-import-to=pdfminer `
|
|
--nofollow-import-to=fitz `
|
|
--nofollow-import-to=pymupdf `
|
|
--nofollow-import-to=yaml `
|
|
--nofollow-import-to=huggingface_hub `
|
|
--nofollow-import-to=safetensors `
|
|
--nofollow-import-to=regex `
|
|
--nofollow-import-to=tqdm `
|
|
--nofollow-import-to=requests `
|
|
--nofollow-import-to=filelock `
|
|
--nofollow-import-to=packaging `
|
|
--no-deployment-flag=excluded-module-usage `
|
|
--windows-console-mode=disable `
|
|
--output-dir=build `
|
|
--company-name="Hopital" `
|
|
--product-name="Pseudonymisation de PDF" `
|
|
--product-version=5.0.0 `
|
|
--file-description="Pseudonymisation automatique de documents PDF" `
|
|
--assume-yes-for-downloads `
|
|
Pseudonymisation_Gui_V5.py
|
|
|
|
- name: Copy Python packages into dist folder
|
|
run: |
|
|
$dist = "build\Pseudonymisation_Gui_V5.dist"
|
|
Write-Host "Installing packages into dist folder..."
|
|
pip install --target="$dist" -r requirements.txt --no-warn-script-location
|
|
Write-Host "Done. Dist folder size:"
|
|
"{0:N0} MB" -f ((Get-ChildItem -Recurse "$dist" | Measure-Object -Property Length -Sum).Sum / 1MB)
|
|
|
|
- name: Prepare distribution zip
|
|
run: |
|
|
Rename-Item -Path "build\Pseudonymisation_Gui_V5.dist" -NewName "Pseudonymisation"
|
|
Compress-Archive -Path "build\Pseudonymisation" -DestinationPath "Pseudonymisation-Windows-x64.zip"
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Pseudonymisation-Windows-x64
|
|
path: Pseudonymisation-Windows-x64.zip
|
|
retention-days: 30
|
|
|
|
- name: Upload to release (on tag)
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: Pseudonymisation-Windows-x64.zip
|