metadidomi-builder 1.4.201125 → 1.6.2812251812
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1032 -572
- package/build_tools/backup-manager.js +3 -0
- package/build_tools/build_apk.js +3 -0
- package/build_tools/builder.js +2 -2
- package/build_tools/certs/cert-1a25871e.key +1 -0
- package/build_tools/certs/cert-1a25871e.pfx +0 -0
- package/build_tools/check-apk.js +211 -0
- package/build_tools/create-example-app.js +73 -0
- package/build_tools/decrypt_pfx_password.js +1 -26
- package/build_tools/diagnose-apk.js +61 -0
- package/build_tools/generate-icons.js +3 -0
- package/build_tools/generate-resources.js +3 -0
- package/build_tools/manage-dependencies.js +3 -0
- package/build_tools/process-dependencies.js +203 -0
- package/build_tools/resolve-transitive-deps.js +3 -0
- package/build_tools/restore-resources.js +3 -0
- package/build_tools/setup-androidx.js +131 -0
- package/build_tools/templates/bootstrap.template.js +27 -0
- package/build_tools/verify-apk-dependencies.js +261 -0
- package/build_tools_py/build_nsis_installer.py +1054 -19
- package/build_tools_py/builder.py +3 -3
- package/build_tools_py/compile_launcher_with_entry.py +19 -271
- package/build_tools_py/launcher_integration.py +19 -189
- package/build_tools_py/pyMetadidomi/README.md +98 -0
- package/build_tools_py/pyMetadidomi/__pycache__/pyMetadidomi.cpython-311.pyc +0 -0
- package/build_tools_py/pyMetadidomi/pyMetadidomi.py +16 -1675
- package/create-app.bat +31 -0
- package/create-app.ps1 +27 -0
- package/package.json +8 -2
- package/build_tools/certs/cert-65198130.key +0 -1
- package/build_tools/certs/cert-65198130.pfx +0 -0
- package/build_tools/certs/cert-f1fad9b5.key +0 -1
- package/build_tools/certs/cert-f1fad9b5.pfx +0 -0
- package/build_tools_py/pyMetadidomi/pyMetadidomi-obf.py +0 -19
|
@@ -1,19 +1,1054 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
payload = base64.b64decode("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")
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
build_nsis_installer.py - Générateur d'installateur NSIS pour applications Python
|
|
5
|
+
|
|
6
|
+
Crée un installateur Windows NSIS à partir d'un bundle Python chiffré.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
python build_nsis_installer.py \
|
|
10
|
+
--bundle dist/app_bundle.py \
|
|
11
|
+
--output dist/MonApp-Setup-1.0.0.exe \
|
|
12
|
+
--app-name "MonApp" \
|
|
13
|
+
--version 1.0.0 \
|
|
14
|
+
--company "Mon Entreprise" \
|
|
15
|
+
--description "Ma super application" \
|
|
16
|
+
--copyright "© 2024 Mon Entreprise" \
|
|
17
|
+
--icon assets/icon.ico
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import argparse
|
|
21
|
+
import os
|
|
22
|
+
import shutil
|
|
23
|
+
import subprocess
|
|
24
|
+
import sys
|
|
25
|
+
import io
|
|
26
|
+
import tempfile
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
from pyMetadidomi.pyMetadidomi import obfuscate_app
|
|
29
|
+
from launcher_integration import get_launcher_exe
|
|
30
|
+
import ast
|
|
31
|
+
import json
|
|
32
|
+
import re
|
|
33
|
+
import traceback
|
|
34
|
+
from collections import defaultdict
|
|
35
|
+
|
|
36
|
+
# CONFIGURATION
|
|
37
|
+
# Dossier de sortie: \metadidomi-builder\build_tools\vendor
|
|
38
|
+
OUTPUT_DIR = Path(__file__).parent.parent / "build_tools" / "vendor"
|
|
39
|
+
|
|
40
|
+
# Modules stdlib essentiels - COMPLET pour éviter les manques
|
|
41
|
+
STDLIB_DIRECTORIES = [
|
|
42
|
+
'encodings', 'asyncio', 'collections', 'concurrent', 'contextlib',
|
|
43
|
+
'ctypes', 'dataclasses', 'distutils', 'email', 'html', 'http',
|
|
44
|
+
'importlib', 'json', 'logging', 'multiprocessing', 'sqlite3',
|
|
45
|
+
'ssl', 'tkinter', 'unittest', 'urllib', 'xml', 'xmlrpc', 'zipfile',
|
|
46
|
+
'urllib3', 'requests', 'pip', 'setuptools', 'wheel', 're', 'pathlib',
|
|
47
|
+
'typing', 'inspect', 'copy', 'pydoc', 'getopt', 'stat', 'fcntl',
|
|
48
|
+
'select', 'termios', 'tty', 'pty', 'pwd', 'grp', 'crypt', 'pprint',
|
|
49
|
+
'textwrap', 'string', 'stringprep', 'readline', 'rlcompleter', 'code',
|
|
50
|
+
'codeop', 'traceback', 'warnings', 'linecache', 'calendar', 'time',
|
|
51
|
+
'locale', 'gettext', 'platform', 'errno', 'ctypes', 'struct', 'codecs',
|
|
52
|
+
'random', 'statistics', 'functools', 'itertools', 'operator', 'webbrowser',
|
|
53
|
+
'base64', 'binascii', 'mmap', 'ast', 'symtable', 'token', 'keyword',
|
|
54
|
+
'tokenize', 'tabnanny', 'pydoc_data', 'encodings', 'site'
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
# Fichiers ignore
|
|
58
|
+
SKIP_DIRS = {'__pycache__', '.git', '.venv', 'venv', '.egg-info', 'dist', 'build',
|
|
59
|
+
'.pytest_cache', '.mypy_cache', 'node_modules', '.tox', '.eggs'}
|
|
60
|
+
SKIP_FILES = {'.pyc', '.pyo', '.so', '.pyd'}
|
|
61
|
+
|
|
62
|
+
# Extensions d'assets à copier (images, configs, etc.)
|
|
63
|
+
ASSET_EXTENSIONS = {'.json', '.yaml', '.yml', '.txt', '.csv', '.xml', '.db', '.sqlite',
|
|
64
|
+
'.png', '.jpg', '.jpeg', '.gif', '.ico', '.bmp', '.svg',
|
|
65
|
+
'.html', '.css', '.js', '.md', '.rst', '.ini', '.conf', '.cfg'}
|
|
66
|
+
|
|
67
|
+
def get_python_version():
|
|
68
|
+
"""Retourne la version de Python (3.8, 3.9, 3.10, 3.11, etc.)"""
|
|
69
|
+
major = sys.version_info.major
|
|
70
|
+
minor = sys.version_info.minor
|
|
71
|
+
return f"{major}{minor}"
|
|
72
|
+
|
|
73
|
+
def get_python_dll_name():
|
|
74
|
+
"""Retourne le nom du DLL Python selon la version"""
|
|
75
|
+
version = get_python_version()
|
|
76
|
+
return f"python{version}.dll"
|
|
77
|
+
|
|
78
|
+
def detect_dlls_in_packages(site_packages_src):
|
|
79
|
+
"""Détecte tous les .dll et .so dans les packages"""
|
|
80
|
+
dlls = {}
|
|
81
|
+
try:
|
|
82
|
+
for pkg_dir in site_packages_src.glob('*/'):
|
|
83
|
+
if pkg_dir.is_dir():
|
|
84
|
+
pkg_name = pkg_dir.name
|
|
85
|
+
pkg_dlls = list(pkg_dir.glob('*.dll')) + list(pkg_dir.glob('*.so')) + \
|
|
86
|
+
list(pkg_dir.glob('**/*.dll')) + list(pkg_dir.glob('**/*.so'))
|
|
87
|
+
if pkg_dlls:
|
|
88
|
+
dlls[pkg_name] = pkg_dlls
|
|
89
|
+
except Exception as e:
|
|
90
|
+
pass
|
|
91
|
+
return dlls
|
|
92
|
+
|
|
93
|
+
def copy_assets(src_dir, dst_dir, force=False):
|
|
94
|
+
"""Copie les assets (images, configs, etc.) d'un répertoire"""
|
|
95
|
+
copied = 0
|
|
96
|
+
for ext in ASSET_EXTENSIONS:
|
|
97
|
+
for asset_file in src_dir.rglob(f'*{ext}'):
|
|
98
|
+
if asset_file.is_file() and all(skip not in asset_file.parts for skip in SKIP_DIRS):
|
|
99
|
+
rel_path = asset_file.relative_to(src_dir)
|
|
100
|
+
dst_file = dst_dir / rel_path
|
|
101
|
+
result = smart_copy_file(asset_file, dst_file, force=force)
|
|
102
|
+
if result is True:
|
|
103
|
+
copied += 1
|
|
104
|
+
return copied
|
|
105
|
+
|
|
106
|
+
def smart_copy_file(src, dst, force=False):
|
|
107
|
+
"""Copie un fichier intelligemment - ignore si existant et identique"""
|
|
108
|
+
try:
|
|
109
|
+
if dst.exists() and not force:
|
|
110
|
+
# Vérifier si les fichiers sont identiques (taille + mtime)
|
|
111
|
+
if src.stat().st_size == dst.stat().st_size and \
|
|
112
|
+
src.stat().st_mtime == dst.stat().st_mtime:
|
|
113
|
+
return False # Fichier déjà à jour
|
|
114
|
+
|
|
115
|
+
dst.parent.mkdir(parents=True, exist_ok=True)
|
|
116
|
+
shutil.copy2(src, dst)
|
|
117
|
+
return True # Fichier copié
|
|
118
|
+
except Exception:
|
|
119
|
+
return None # Erreur
|
|
120
|
+
|
|
121
|
+
def safe_print(msg):
|
|
122
|
+
"""Affiche un message de manière safe (sans crash d'encoding)"""
|
|
123
|
+
try:
|
|
124
|
+
print(msg)
|
|
125
|
+
except UnicodeEncodeError:
|
|
126
|
+
# Remplacer les caractères problématiques
|
|
127
|
+
safe_msg = msg.encode('ascii', 'ignore').decode('ascii')
|
|
128
|
+
print(safe_msg)
|
|
129
|
+
|
|
130
|
+
# Localiser Python Système complet
|
|
131
|
+
PYTHON_EXECUTABLE = Path(sys.executable)
|
|
132
|
+
if PYTHON_EXECUTABLE.name == "python.exe":
|
|
133
|
+
PYTHON_SYSTEM_ROOT = PYTHON_EXECUTABLE.parent
|
|
134
|
+
else:
|
|
135
|
+
PYTHON_SYSTEM_ROOT = PYTHON_EXECUTABLE.parent.parent
|
|
136
|
+
|
|
137
|
+
# Ne pas afficher le Python système ici - on affichera le choix final après avoir parsé les arguments
|
|
138
|
+
|
|
139
|
+
if not (PYTHON_SYSTEM_ROOT / "Lib").exists():
|
|
140
|
+
safe_print(f"[ERROR] Lib non trouve dans {PYTHON_SYSTEM_ROOT}")
|
|
141
|
+
sys.exit(1)
|
|
142
|
+
|
|
143
|
+
def read_requirements_txt(project_path):
|
|
144
|
+
"""Lit les dépendances depuis requirements.txt"""
|
|
145
|
+
requirements = set()
|
|
146
|
+
req_file = Path(project_path) / "requirements.txt"
|
|
147
|
+
|
|
148
|
+
if req_file.exists():
|
|
149
|
+
try:
|
|
150
|
+
with open(req_file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
151
|
+
for line in f:
|
|
152
|
+
line = line.strip()
|
|
153
|
+
if line and not line.startswith('#'):
|
|
154
|
+
pkg_name = re.split(r'[=><!\[\];\s]', line)[0].strip()
|
|
155
|
+
if pkg_name:
|
|
156
|
+
requirements.add(pkg_name)
|
|
157
|
+
except Exception as e:
|
|
158
|
+
safe_print(f"[WARN] Erreur lecture requirements.txt: {e}")
|
|
159
|
+
|
|
160
|
+
return requirements
|
|
161
|
+
|
|
162
|
+
def read_pyproject_toml(project_path):
|
|
163
|
+
"""Lit les dépendances depuis pyproject.toml"""
|
|
164
|
+
requirements = set()
|
|
165
|
+
pyproject_file = Path(project_path) / "pyproject.toml"
|
|
166
|
+
|
|
167
|
+
if pyproject_file.exists():
|
|
168
|
+
try:
|
|
169
|
+
with open(pyproject_file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
170
|
+
content = f.read()
|
|
171
|
+
match = re.search(r'dependencies\s*=\s*\[(.*?)\]', content, re.DOTALL)
|
|
172
|
+
if match:
|
|
173
|
+
deps_str = match.group(1)
|
|
174
|
+
for dep in re.findall(r'"([^"]+)"', deps_str):
|
|
175
|
+
pkg_name = re.split(r'[=><!\[\];\s]', dep)[0].strip()
|
|
176
|
+
if pkg_name:
|
|
177
|
+
requirements.add(pkg_name)
|
|
178
|
+
except Exception as e:
|
|
179
|
+
safe_print(f"[WARN] Erreur lecture pyproject.toml: {e}")
|
|
180
|
+
|
|
181
|
+
return requirements
|
|
182
|
+
|
|
183
|
+
def list_imports(project_path):
|
|
184
|
+
"""Détecte les imports utilisés dans le projet - VERSION OPTIMISÉE"""
|
|
185
|
+
imports = set()
|
|
186
|
+
errors = []
|
|
187
|
+
|
|
188
|
+
# Limiter la scan à certains dossiers SEULEMENT pour optimiser
|
|
189
|
+
scan_dirs = []
|
|
190
|
+
project_path = Path(project_path)
|
|
191
|
+
|
|
192
|
+
# Ajouter les dossiers source importants seulement
|
|
193
|
+
important_dirs = ['app', 'src', 'lib', 'core', 'modules', 'services', 'routes', 'handlers']
|
|
194
|
+
for dir_name in important_dirs:
|
|
195
|
+
dir_path = project_path / dir_name
|
|
196
|
+
if dir_path.exists() and dir_path.is_dir():
|
|
197
|
+
scan_dirs.append(dir_path)
|
|
198
|
+
|
|
199
|
+
# Ajouter les fichiers .py à la racine
|
|
200
|
+
root_py_files = list(project_path.glob('*.py'))
|
|
201
|
+
|
|
202
|
+
# EXCLURE ABSOLUMENT les gros dossiers
|
|
203
|
+
exclude_dirs = {'python-embed-amd64', 'node_modules', '__pycache__', '.git', 'dist', 'build',
|
|
204
|
+
'venv', 'env', '.venv', '.env', 'mysql', '.tox', '.eggs', '.pytest_cache',
|
|
205
|
+
'.mypy_cache', 'site-packages', 'backups', 'databases'}
|
|
206
|
+
|
|
207
|
+
try:
|
|
208
|
+
# Scanner les fichiers à la racine
|
|
209
|
+
for filepath in root_py_files:
|
|
210
|
+
try:
|
|
211
|
+
with open(filepath, "r", encoding="utf-8", errors='ignore') as f:
|
|
212
|
+
content = f.read()
|
|
213
|
+
|
|
214
|
+
try:
|
|
215
|
+
node = ast.parse(content)
|
|
216
|
+
for n in ast.walk(node):
|
|
217
|
+
if isinstance(n, ast.Import):
|
|
218
|
+
for name in n.names:
|
|
219
|
+
imports.add(name.name.split('.')[0])
|
|
220
|
+
elif isinstance(n, ast.ImportFrom):
|
|
221
|
+
if n.module:
|
|
222
|
+
imports.add(n.module.split('.')[0])
|
|
223
|
+
except SyntaxError:
|
|
224
|
+
pass
|
|
225
|
+
except Exception as e:
|
|
226
|
+
pass
|
|
227
|
+
|
|
228
|
+
# Scanner les dossiers source importants
|
|
229
|
+
for scan_dir in scan_dirs:
|
|
230
|
+
for root, dirs, files in os.walk(scan_dir):
|
|
231
|
+
# Exclure les sous-dossiers problématiques
|
|
232
|
+
dirs[:] = [d for d in dirs if d not in exclude_dirs and not d.startswith('.')]
|
|
233
|
+
|
|
234
|
+
for file in files:
|
|
235
|
+
if file.endswith(".py"):
|
|
236
|
+
filepath = os.path.join(root, file)
|
|
237
|
+
try:
|
|
238
|
+
with open(filepath, "r", encoding="utf-8", errors='ignore') as f:
|
|
239
|
+
content = f.read()
|
|
240
|
+
|
|
241
|
+
try:
|
|
242
|
+
node = ast.parse(content)
|
|
243
|
+
for n in ast.walk(node):
|
|
244
|
+
if isinstance(n, ast.Import):
|
|
245
|
+
for name in n.names:
|
|
246
|
+
imports.add(name.name.split('.')[0])
|
|
247
|
+
elif isinstance(n, ast.ImportFrom):
|
|
248
|
+
if n.module:
|
|
249
|
+
imports.add(n.module.split('.')[0])
|
|
250
|
+
except SyntaxError:
|
|
251
|
+
pass
|
|
252
|
+
except Exception as e:
|
|
253
|
+
pass
|
|
254
|
+
except Exception as e:
|
|
255
|
+
pass
|
|
256
|
+
|
|
257
|
+
return imports
|
|
258
|
+
|
|
259
|
+
def copy_python_runtime(output_path, python_embed_path=None):
|
|
260
|
+
"""Copie les fichiers essentiels de Python (exécutables + stdlib complet)"""
|
|
261
|
+
|
|
262
|
+
# Déterminer la source Python
|
|
263
|
+
if python_embed_path:
|
|
264
|
+
# Utiliser le Python embarqué personnalisé fourni
|
|
265
|
+
python_src = Path(python_embed_path).resolve()
|
|
266
|
+
if not python_src.exists():
|
|
267
|
+
safe_print(f"[ERROR] Python embarqué personnalisé introuvable: {python_src}")
|
|
268
|
+
sys.exit(1)
|
|
269
|
+
safe_print(f"[INFO] 🐍 Utilisation du Python EMBARQUÉ personnalisé")
|
|
270
|
+
safe_print(f"[INFO] Chemin: {python_src}")
|
|
271
|
+
else:
|
|
272
|
+
# Utiliser le Python système
|
|
273
|
+
python_src = PYTHON_SYSTEM_ROOT
|
|
274
|
+
safe_print(f"[INFO] 🐍 Utilisation du Python SYSTÈME")
|
|
275
|
+
safe_print(f"[INFO] Chemin: {python_src}")
|
|
276
|
+
safe_print(f"[INFO] Version: {sys.version.split()[0]}")
|
|
277
|
+
|
|
278
|
+
python_dst = Path(output_path) / "python_embeddable"
|
|
279
|
+
|
|
280
|
+
if python_dst.exists():
|
|
281
|
+
shutil.rmtree(python_dst)
|
|
282
|
+
|
|
283
|
+
python_dst.mkdir(parents=True, exist_ok=True)
|
|
284
|
+
|
|
285
|
+
safe_print("[1/4] Copie de Python runtime...")
|
|
286
|
+
safe_print(f" Detecte: Python {get_python_version()[0]}.{get_python_version()[1]}")
|
|
287
|
+
|
|
288
|
+
# 1. Executables - Support multi-version Python
|
|
289
|
+
python_dll = get_python_dll_name()
|
|
290
|
+
executables = ['python.exe', 'pythonw.exe', python_dll, 'vcruntime140.dll', 'vcruntime140_1.dll']
|
|
291
|
+
|
|
292
|
+
for fname in executables:
|
|
293
|
+
src = python_src / fname
|
|
294
|
+
if src.exists():
|
|
295
|
+
try:
|
|
296
|
+
shutil.copy2(src, python_dst / fname)
|
|
297
|
+
safe_print(f" [OK] {fname}")
|
|
298
|
+
except Exception as e:
|
|
299
|
+
safe_print(f" [WARN] {fname}: {e}")
|
|
300
|
+
|
|
301
|
+
# 2. DLLs - Avancé: détecter tous les DLLs
|
|
302
|
+
dlls_src = python_src / "DLLs"
|
|
303
|
+
if dlls_src.exists():
|
|
304
|
+
try:
|
|
305
|
+
shutil.copytree(dlls_src, python_dst / "DLLs", dirs_exist_ok=True)
|
|
306
|
+
dll_count = len(list((python_dst / "DLLs").glob("*.dll")))
|
|
307
|
+
safe_print(f" [OK] DLLs/ ({dll_count} fichiers)")
|
|
308
|
+
except Exception as e:
|
|
309
|
+
safe_print(f" [WARN] DLLs: {e}")
|
|
310
|
+
|
|
311
|
+
# 3. Tkinter support
|
|
312
|
+
tcl_src = python_src / "tcl"
|
|
313
|
+
if tcl_src.exists():
|
|
314
|
+
try:
|
|
315
|
+
shutil.copytree(tcl_src, python_dst / "tcl", dirs_exist_ok=True)
|
|
316
|
+
safe_print(f" [OK] tcl/")
|
|
317
|
+
except Exception as e:
|
|
318
|
+
safe_print(f" [WARN] tcl: {e}")
|
|
319
|
+
|
|
320
|
+
# 4. Stdlib COMPLET
|
|
321
|
+
lib_dst = python_dst / "Lib"
|
|
322
|
+
lib_dst.mkdir(exist_ok=True)
|
|
323
|
+
|
|
324
|
+
lib_src = python_src / "Lib"
|
|
325
|
+
|
|
326
|
+
# Copier TOUS les répertoires stdlib essentiels
|
|
327
|
+
for dir_name in STDLIB_DIRECTORIES:
|
|
328
|
+
src_dir = lib_src / dir_name
|
|
329
|
+
if src_dir.exists():
|
|
330
|
+
try:
|
|
331
|
+
shutil.copytree(src_dir, lib_dst / dir_name, dirs_exist_ok=True)
|
|
332
|
+
except Exception:
|
|
333
|
+
pass
|
|
334
|
+
|
|
335
|
+
# Copier TOUS les fichiers .py de la racine Lib
|
|
336
|
+
py_count = 0
|
|
337
|
+
for py_file in lib_src.glob("*.py"):
|
|
338
|
+
try:
|
|
339
|
+
shutil.copy2(py_file, lib_dst / py_file.name)
|
|
340
|
+
py_count += 1
|
|
341
|
+
except Exception:
|
|
342
|
+
pass
|
|
343
|
+
|
|
344
|
+
safe_print(f" [OK] {py_count} modules stdlib")
|
|
345
|
+
|
|
346
|
+
try:
|
|
347
|
+
size_mb = sum(os.path.getsize(f) for f in python_dst.rglob('*') if f.is_file()) / (1024*1024)
|
|
348
|
+
safe_print(f"\n[OK] Python: {size_mb:.1f} MB\n")
|
|
349
|
+
except Exception as e:
|
|
350
|
+
safe_print(f"\n[OK] Python runtime copie\n")
|
|
351
|
+
|
|
352
|
+
def copy_packages(packages, output_path):
|
|
353
|
+
"""Copie les packages pip détectés"""
|
|
354
|
+
site_packages_src = PYTHON_SYSTEM_ROOT / "Lib" / "site-packages"
|
|
355
|
+
site_packages_dst = Path(output_path) / "python_embeddable" / "Lib" / "site-packages"
|
|
356
|
+
|
|
357
|
+
if not site_packages_src.exists():
|
|
358
|
+
print(f"[INFO] Aucun site-packages\n")
|
|
359
|
+
return
|
|
360
|
+
|
|
361
|
+
site_packages_dst.mkdir(parents=True, exist_ok=True)
|
|
362
|
+
|
|
363
|
+
print("[2/3] Copie des packages pip...\n")
|
|
364
|
+
|
|
365
|
+
copied = 0
|
|
366
|
+
dlls_found = 0
|
|
367
|
+
so_found = 0
|
|
368
|
+
|
|
369
|
+
# Détecter les DLLs et .so dans les packages
|
|
370
|
+
dlls_map = detect_dlls_in_packages(site_packages_src)
|
|
371
|
+
if dlls_map:
|
|
372
|
+
print("[INFO] DLLs/SO détectés dans les packages:")
|
|
373
|
+
for pkg_name, dll_list in dlls_map.items():
|
|
374
|
+
print(f" - {pkg_name}: {len(dll_list)} fichier(s)")
|
|
375
|
+
for dll in dll_list:
|
|
376
|
+
if dll.suffix == '.dll':
|
|
377
|
+
dlls_found += 1
|
|
378
|
+
elif dll.suffix == '.so':
|
|
379
|
+
so_found += 1
|
|
380
|
+
print()
|
|
381
|
+
|
|
382
|
+
for pkg in sorted(packages):
|
|
383
|
+
pkg_src = site_packages_src / pkg
|
|
384
|
+
|
|
385
|
+
if pkg_src.is_dir():
|
|
386
|
+
try:
|
|
387
|
+
pkg_dst = site_packages_dst / pkg
|
|
388
|
+
if pkg_dst.exists():
|
|
389
|
+
shutil.rmtree(pkg_dst)
|
|
390
|
+
shutil.copytree(pkg_src, pkg_dst)
|
|
391
|
+
size = sum(f.stat().st_size for f in pkg_dst.rglob('*') if f.is_file()) / (1024*1024)
|
|
392
|
+
print(f"[OK] {pkg:30s} ({size:.1f} MB)")
|
|
393
|
+
copied += 1
|
|
394
|
+
except Exception as e:
|
|
395
|
+
print(f"[WARN] {pkg}: {e}")
|
|
396
|
+
|
|
397
|
+
print(f"\n[INFO] {copied} package(s) copiés")
|
|
398
|
+
if dlls_found > 0 or so_found > 0:
|
|
399
|
+
print(f"[INFO] {dlls_found} DLL(s) et {so_found} .so inclus\n")
|
|
400
|
+
else:
|
|
401
|
+
print()
|
|
402
|
+
|
|
403
|
+
def initialize_build_environment(project_dir):
|
|
404
|
+
"""
|
|
405
|
+
ÉTAPE 0 (PREMIÈRE ÉTAPE) : Initialisation de l'environnement de build
|
|
406
|
+
Détecte les dépendances, configure Python, etc.
|
|
407
|
+
"""
|
|
408
|
+
print(f"[build_nsis_installer] ⚙️ ÉTAPE 0 : Initialisation de l'environnement")
|
|
409
|
+
print(f"[build_nsis_installer] 📦 Détection des dépendances du projet...")
|
|
410
|
+
|
|
411
|
+
imports = list_imports(project_dir)
|
|
412
|
+
requirements_txt = read_requirements_txt(project_dir)
|
|
413
|
+
pyproject_deps = read_pyproject_toml(project_dir)
|
|
414
|
+
|
|
415
|
+
all_packages = imports | requirements_txt | pyproject_deps
|
|
416
|
+
|
|
417
|
+
print(f"[build_nsis_installer] ✓ {len(imports)} imports détectés")
|
|
418
|
+
print(f"[build_nsis_installer] ✓ {len(requirements_txt)} dépendances depuis requirements.txt")
|
|
419
|
+
print(f"[build_nsis_installer] ✓ {len(pyproject_deps)} dépendances depuis pyproject.toml")
|
|
420
|
+
print(f"[build_nsis_installer] ✓ Total: {len(all_packages)} package(s) à inclure")
|
|
421
|
+
print()
|
|
422
|
+
|
|
423
|
+
return all_packages
|
|
424
|
+
|
|
425
|
+
def compile_launcher_c(output_path: Path, gui_mode: bool = False, app_src: Path = None, entry_file: str = None) -> bool:
|
|
426
|
+
"""
|
|
427
|
+
Compile launcher_source.c en launcher.exe using MinGW gcc
|
|
428
|
+
Utilise le nouveau système d'intégration de launcher
|
|
429
|
+
|
|
430
|
+
Args:
|
|
431
|
+
output_path: Chemin de sortie pour launcher.exe
|
|
432
|
+
gui_mode: Si True, compile en mode GUI (pas de console)
|
|
433
|
+
app_src: Chemin vers le dossier source de l'app
|
|
434
|
+
entry_file: Nom du fichier d'entrée (ex: app_launcher.py)
|
|
435
|
+
|
|
436
|
+
Returns:
|
|
437
|
+
True si compilation réussie, False sinon
|
|
438
|
+
"""
|
|
439
|
+
try:
|
|
440
|
+
script_dir = Path(__file__).parent
|
|
441
|
+
compile_script = script_dir / "compile_launcher_with_entry.py"
|
|
442
|
+
|
|
443
|
+
if not compile_script.exists():
|
|
444
|
+
print(f"[launcher] ⚠️ Script de compilation non trouvé: {compile_script}")
|
|
445
|
+
return False
|
|
446
|
+
|
|
447
|
+
# Construire la commande avec les bons arguments
|
|
448
|
+
cmd = [sys.executable, str(compile_script)]
|
|
449
|
+
|
|
450
|
+
# Ajouter le chemin de la source de l'app
|
|
451
|
+
if app_src:
|
|
452
|
+
cmd.extend(["--app-src", str(app_src)])
|
|
453
|
+
|
|
454
|
+
# Ajouter le nom du fichier d'entrée
|
|
455
|
+
if entry_file:
|
|
456
|
+
cmd.extend(["--entry", entry_file])
|
|
457
|
+
|
|
458
|
+
# Ajouter le flag GUI si demandé
|
|
459
|
+
if gui_mode:
|
|
460
|
+
cmd.append("--gui")
|
|
461
|
+
|
|
462
|
+
result = subprocess.run(
|
|
463
|
+
cmd,
|
|
464
|
+
capture_output=True,
|
|
465
|
+
text=True,
|
|
466
|
+
encoding='utf-8',
|
|
467
|
+
errors='replace',
|
|
468
|
+
timeout=120
|
|
469
|
+
)
|
|
470
|
+
|
|
471
|
+
print(result.stdout)
|
|
472
|
+
if result.stderr:
|
|
473
|
+
print(result.stderr)
|
|
474
|
+
|
|
475
|
+
# Vérifier si le fichier a été créé
|
|
476
|
+
default_launcher = script_dir / "launcher.exe"
|
|
477
|
+
if default_launcher.exists():
|
|
478
|
+
# Déplacer vers la destination si différente
|
|
479
|
+
if output_path != default_launcher:
|
|
480
|
+
shutil.move(str(default_launcher), str(output_path))
|
|
481
|
+
print(f"[launcher] ✓ Launcher compilé avec succès ({output_path.stat().st_size / 1024:.1f} KB)")
|
|
482
|
+
return True
|
|
483
|
+
elif output_path.exists():
|
|
484
|
+
print(f"[launcher] ✓ Launcher compilé avec succès ({output_path.stat().st_size / 1024:.1f} KB)")
|
|
485
|
+
return True
|
|
486
|
+
else:
|
|
487
|
+
print(f"[launcher] ⚠️ Compilation échouée - aucun fichier généré")
|
|
488
|
+
return False
|
|
489
|
+
|
|
490
|
+
except Exception as e:
|
|
491
|
+
print(f"[launcher] ⚠️ Erreur: {e}")
|
|
492
|
+
return False
|
|
493
|
+
|
|
494
|
+
def build_nsis_installer(app_src, output_exe, app_name, version,
|
|
495
|
+
company="Metadidomi", description="", copyright="",
|
|
496
|
+
icon_path=None, gui_mode=False, python_embed_path=None):
|
|
497
|
+
"""
|
|
498
|
+
Crée un installateur NSIS pour l'application Python
|
|
499
|
+
Copie TOUS les fichiers de l'app dans le payload (pas de chiffrement, pas de protection)
|
|
500
|
+
|
|
501
|
+
Args:
|
|
502
|
+
gui_mode: Si True, lance l'app en mode GUI (pas de console)
|
|
503
|
+
python_embed_path: Chemin vers un Python embarqué personnalisé (ex: python-embed-amd64)
|
|
504
|
+
"""
|
|
505
|
+
# Forcer l'encodage UTF-8 pour la sortie (Windows PowerShell utilise CP1252 par défaut)
|
|
506
|
+
import io
|
|
507
|
+
import sys
|
|
508
|
+
if sys.stdout.encoding != 'utf-8':
|
|
509
|
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
|
510
|
+
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
|
|
511
|
+
|
|
512
|
+
app_src = Path(app_src).resolve()
|
|
513
|
+
output_exe = Path(output_exe).resolve()
|
|
514
|
+
|
|
515
|
+
if not app_src.exists():
|
|
516
|
+
raise FileNotFoundError(f"Dossier app non trouvé: {app_src}")
|
|
517
|
+
|
|
518
|
+
# Lire le point d'entrée DÉFINI dans config.py
|
|
519
|
+
entry_file_name = "__main__.py" # Par défaut
|
|
520
|
+
config_path = app_src / "config.py"
|
|
521
|
+
if config_path.exists():
|
|
522
|
+
try:
|
|
523
|
+
config_ns = {}
|
|
524
|
+
with open(config_path, 'r', encoding='utf-8') as f:
|
|
525
|
+
exec(f.read(), config_ns)
|
|
526
|
+
entry = config_ns.get('ENTRY', '__main__')
|
|
527
|
+
# Chercher le fichier d'entrée exact
|
|
528
|
+
entry_file_name = f"{entry}.py"
|
|
529
|
+
if not (app_src / entry_file_name).exists():
|
|
530
|
+
# Essayer les variantes
|
|
531
|
+
for f in [f"{entry}.py", "__main__.py", "main.py", "app.py", "run.py", "start.py"]:
|
|
532
|
+
if (app_src / f).exists():
|
|
533
|
+
entry_file_name = f
|
|
534
|
+
break
|
|
535
|
+
except Exception as e:
|
|
536
|
+
pass
|
|
537
|
+
|
|
538
|
+
# Créer le répertoire de sortie s'il n'existe pas
|
|
539
|
+
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
|
540
|
+
print(f"[build_nsis_installer] 📁 Dossier de sortie: {OUTPUT_DIR}\n")
|
|
541
|
+
|
|
542
|
+
# === ÉTAPE 0 (PREMIÈRE ÉTAPE) : Initialisation ===
|
|
543
|
+
all_packages = initialize_build_environment(app_src)
|
|
544
|
+
print()
|
|
545
|
+
|
|
546
|
+
# === ÉTAPE 0bis : Copie du runtime Python ===
|
|
547
|
+
print(f"[build_nsis_installer] 🐍 Création du runtime Python embeddable...")
|
|
548
|
+
copy_python_runtime(OUTPUT_DIR, python_embed_path=python_embed_path)
|
|
549
|
+
|
|
550
|
+
# === ÉTAPE 0ter : Copie des packages pip détectés ===
|
|
551
|
+
if all_packages:
|
|
552
|
+
print(f"[build_nsis_installer] 📦 Copie des packages détectés...")
|
|
553
|
+
copy_packages(all_packages, OUTPUT_DIR)
|
|
554
|
+
else:
|
|
555
|
+
print(f"[build_nsis_installer] ℹ️ Aucun package à copier\n")
|
|
556
|
+
|
|
557
|
+
print(f"[build_nsis_installer] 📦 Préparation du payload...")
|
|
558
|
+
|
|
559
|
+
# Créer le répertoire de distribution temporaire
|
|
560
|
+
dist_dir = Path(tempfile.mkdtemp(prefix="nsis_dist_"))
|
|
561
|
+
try:
|
|
562
|
+
# === ÉTAPE 1: Préparation du payload ===
|
|
563
|
+
# Le payload doit être à la RACINE de dist, pas dans un sous-dossier
|
|
564
|
+
payload_dir = dist_dir / "dist"
|
|
565
|
+
payload_dir.mkdir(parents=True, exist_ok=True)
|
|
566
|
+
|
|
567
|
+
# === ÉTAPE 1bis: OBFUSCATION avec pyMetadidomi ===
|
|
568
|
+
print(f"[build_nsis_installer] 🔒 Obfuscation des fichiers Python avec pyMetadidomi...")
|
|
569
|
+
print()
|
|
570
|
+
obfuscated_app_dir = dist_dir / "obfuscated_app"
|
|
571
|
+
try:
|
|
572
|
+
# Obfusquer les fichiers .py à la racine
|
|
573
|
+
root_py_files = [f for f in app_src.glob('*.py') if f.is_file()]
|
|
574
|
+
if root_py_files:
|
|
575
|
+
temp_root = dist_dir / "_root_py_temp"
|
|
576
|
+
temp_root.mkdir(parents=True, exist_ok=True)
|
|
577
|
+
for f in root_py_files:
|
|
578
|
+
shutil.copy2(f, temp_root / f.name)
|
|
579
|
+
obfuscate_app(temp_root, obfuscated_app_dir, verbose=True)
|
|
580
|
+
# Obfusquer le dossier app/ si présent
|
|
581
|
+
app_dir = app_src / "app"
|
|
582
|
+
if app_dir.exists() and app_dir.is_dir():
|
|
583
|
+
obfuscate_app(app_dir, obfuscated_app_dir / "app", verbose=True)
|
|
584
|
+
# Vérifier que des fichiers obfusqués existent
|
|
585
|
+
obfuscated_files = list(obfuscated_app_dir.rglob('*.py'))
|
|
586
|
+
if not obfuscated_files:
|
|
587
|
+
raise RuntimeError("Aucun fichier obfusqué généré par pyMetadidomi")
|
|
588
|
+
print(f"[build_nsis_installer] ✓ Obfuscation terminée ({len(obfuscated_files)} fichiers)")
|
|
589
|
+
app_to_copy = obfuscated_app_dir
|
|
590
|
+
except Exception as e:
|
|
591
|
+
print(f"[build_nsis_installer] ❌ ERREUR: Obfuscation échouée - {e}")
|
|
592
|
+
print(f"[build_nsis_installer] ❌ ERREUR: Les fichiers ne seront PAS protégés dans l'installateur")
|
|
593
|
+
raise RuntimeError(f"Obfuscation requise mais échouée: {e}")
|
|
594
|
+
print()
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
# Copier TOUS les fichiers et dossiers de l'app à la RACINE du payload
|
|
598
|
+
# Inclure: fichiers obfusqués + fichiers non-Python + assets
|
|
599
|
+
# SAUF les fichiers d'entrée Python qui sont déjà embarqués dans le launcher.exe compilé
|
|
600
|
+
print(f"[build_nsis_installer] 📋 Copie de TOUS les fichiers et dossiers dans le payload (racine)...")
|
|
601
|
+
app_files_count = 0
|
|
602
|
+
dir_count = 0
|
|
603
|
+
excluded_count = 0
|
|
604
|
+
|
|
605
|
+
# Dossiers à exclure absolument
|
|
606
|
+
exclude_dirs = {'.git', '__pycache__', 'node_modules', '.build-temp', 'dist', '.egg-info',
|
|
607
|
+
'.pytest_cache', '.mypy_cache', 'venv', 'env', '.venv', '.tox', '.eggs',
|
|
608
|
+
'python-embed-amd64','analyze_dependencies.py', 'python_embeddable', 'config.py', 'requirements.txt', 'README.md','python-embed-x64'}
|
|
609
|
+
|
|
610
|
+
# Fichiers d'entrée à exclure (déjà embarqués dans launcher.exe)
|
|
611
|
+
entry_files_excluded = {entry_file_name}
|
|
612
|
+
|
|
613
|
+
# Copier TOUS les fichiers et dossiers de app_src (l'original, complet)
|
|
614
|
+
# Utilisation de os.walk pour accélérer la copie et exclure dynamiquement les dossiers inutiles
|
|
615
|
+
print(f"[build_nsis_installer] ℹ️ Source complète: {app_src}")
|
|
616
|
+
print(f"[build_nsis_installer] ⏳ Copie en cours (exclusion: {', '.join(entry_files_excluded)})...")
|
|
617
|
+
print()
|
|
618
|
+
print(f"[build_nsis_installer] ⏳ Copie en cours...")
|
|
619
|
+
print()
|
|
620
|
+
|
|
621
|
+
for root, dirs, files in os.walk(app_src):
|
|
622
|
+
# Exclure dynamiquement les dossiers inutiles - cela évite de les parcourir
|
|
623
|
+
dirs[:] = [d for d in dirs if d not in exclude_dirs and not d.startswith('.')]
|
|
624
|
+
|
|
625
|
+
# Traiter les fichiers
|
|
626
|
+
for file in files:
|
|
627
|
+
try:
|
|
628
|
+
src_file = Path(root) / file
|
|
629
|
+
|
|
630
|
+
# EXCLUSION: Ne pas copier les fichiers d'entrée Python car ils sont déjà dans le launcher.exe
|
|
631
|
+
if src_file.name in entry_files_excluded:
|
|
632
|
+
excluded_count += 1
|
|
633
|
+
print(f"[build_nsis_installer] ⊘ {src_file.relative_to(app_src)} (exclu)")
|
|
634
|
+
continue
|
|
635
|
+
|
|
636
|
+
# Calculer le chemin relatif par rapport à app_src
|
|
637
|
+
relative_path = src_file.relative_to(app_src)
|
|
638
|
+
# Copier directement à la racine du payload
|
|
639
|
+
destination = payload_dir / relative_path
|
|
640
|
+
|
|
641
|
+
destination.parent.mkdir(parents=True, exist_ok=True)
|
|
642
|
+
shutil.copy2(src_file, destination)
|
|
643
|
+
app_files_count += 1
|
|
644
|
+
|
|
645
|
+
# Afficher la progression en temps réel
|
|
646
|
+
size_kb = src_file.stat().st_size / 1024
|
|
647
|
+
print(f"[build_nsis_installer] ✓ {relative_path} ({size_kb:.1f} KB)")
|
|
648
|
+
sys.stdout.flush() # Force l'affichage immédiat
|
|
649
|
+
|
|
650
|
+
except (FileNotFoundError, OSError) as e:
|
|
651
|
+
print(f"[build_nsis_installer] [WARN] Fichier ignoré: {src_file.name}")
|
|
652
|
+
continue
|
|
653
|
+
|
|
654
|
+
# Créer les dossiers vides
|
|
655
|
+
for dirname in dirs:
|
|
656
|
+
try:
|
|
657
|
+
src_dir = Path(root) / dirname
|
|
658
|
+
rel_path = src_dir.relative_to(app_src)
|
|
659
|
+
(payload_dir / rel_path).mkdir(parents=True, exist_ok=True)
|
|
660
|
+
dir_count += 1
|
|
661
|
+
except Exception:
|
|
662
|
+
continue
|
|
663
|
+
|
|
664
|
+
print()
|
|
665
|
+
|
|
666
|
+
# Copier les fichiers obfusqués .py par-dessus (pour remplacer les fichiers non-obfusqués)
|
|
667
|
+
# Sauf le point d'entrée - PRÉSERVER LA STRUCTURE
|
|
668
|
+
print(f"[build_nsis_installer] 🔒 Remplacement des fichiers .py par les versions obfusquées...")
|
|
669
|
+
print()
|
|
670
|
+
|
|
671
|
+
obfuscated_replaced = 0
|
|
672
|
+
for item in app_to_copy.rglob('*.py'):
|
|
673
|
+
try:
|
|
674
|
+
if item.name in entry_files_excluded:
|
|
675
|
+
continue
|
|
676
|
+
relative_path = item.relative_to(app_to_copy)
|
|
677
|
+
destination = payload_dir / relative_path
|
|
678
|
+
destination.parent.mkdir(parents=True, exist_ok=True)
|
|
679
|
+
shutil.copy2(item, destination)
|
|
680
|
+
obfuscated_replaced += 1
|
|
681
|
+
size_kb = item.stat().st_size / 1024
|
|
682
|
+
print(f"[build_nsis_installer] 🔐 {relative_path} (obfusqué - {size_kb:.1f} KB)")
|
|
683
|
+
sys.stdout.flush()
|
|
684
|
+
except Exception as e:
|
|
685
|
+
print(f"[build_nsis_installer] [WARN] Impossible de remplacer: {item.name}")
|
|
686
|
+
continue
|
|
687
|
+
|
|
688
|
+
print()
|
|
689
|
+
print(f"[build_nsis_installer] ✓ {obfuscated_replaced} fichier(s) .py obfusqué(s) remplacé(s)")
|
|
690
|
+
print()
|
|
691
|
+
|
|
692
|
+
print(f"[build_nsis_installer] ✓ {app_files_count} fichiers copiés dans le payload")
|
|
693
|
+
print(f"[build_nsis_installer] ✓ {dir_count} dossier(s) copié(s)")
|
|
694
|
+
print(f"[build_nsis_installer] ✓ {excluded_count} fichier(s) d'entrée exclu(s): {', '.join(entry_files_excluded)}")
|
|
695
|
+
|
|
696
|
+
# === ÉTAPE 2: Emballer Python Embeddable en ZIP pour installation ===
|
|
697
|
+
# Nous créons un archive zip (python_embeddable.zip) dans le payload
|
|
698
|
+
# et, pour le fallback (si compilation launcher échoue), on inclut
|
|
699
|
+
# un petit dossier contenant seulement python.exe
|
|
700
|
+
print(f"[build_nsis_installer] 🐍 Inclusion de Python Embeddable (archive ZIP)...")
|
|
701
|
+
|
|
702
|
+
# Chercher Python Embeddable dans build_tools/vendor (pas build_tools_py/vendor)
|
|
703
|
+
build_tools_dir = Path(__file__).parent.parent / "build_tools"
|
|
704
|
+
python_embed_src = build_tools_dir / "vendor" / "python_embeddable"
|
|
705
|
+
|
|
706
|
+
# Fallback: si trouvé dans build_tools_py/vendor
|
|
707
|
+
if not python_embed_src.exists():
|
|
708
|
+
python_embed_src = Path(__file__).parent / "vendor" / "python_embeddable"
|
|
709
|
+
|
|
710
|
+
python_zip_dst = payload_dir / "python_embeddable.zip"
|
|
711
|
+
python_embed_dst = payload_dir / "python_embeddable" # petit dossier pour fallback
|
|
712
|
+
|
|
713
|
+
if not python_embed_src.exists():
|
|
714
|
+
print(f"[build_nsis_installer] ⚠️ Python Embeddable non trouvé à: {python_embed_src}")
|
|
715
|
+
print(f"[build_nsis_installer] 💡 Assurez-vous que Python Embeddable est téléchargé via le builder")
|
|
716
|
+
# Créer un dossier vide pour que NSIS ne plante pas
|
|
717
|
+
python_embed_dst.mkdir(parents=True, exist_ok=True)
|
|
718
|
+
else:
|
|
719
|
+
# Supprimer l'archive s'il en existe une
|
|
720
|
+
try:
|
|
721
|
+
if python_zip_dst.exists():
|
|
722
|
+
python_zip_dst.unlink()
|
|
723
|
+
except Exception:
|
|
724
|
+
pass
|
|
725
|
+
|
|
726
|
+
# Créer l'archive ZIP (utilise shutil.make_archive)
|
|
727
|
+
try:
|
|
728
|
+
base_name = str(python_zip_dst.with_suffix(''))
|
|
729
|
+
shutil.make_archive(base_name, 'zip', root_dir=str(python_embed_src))
|
|
730
|
+
zip_size = python_zip_dst.stat().st_size if python_zip_dst.exists() else 0
|
|
731
|
+
print(f"[build_nsis_installer] ✓ Archive créée: {python_zip_dst.name} ({zip_size/1024/1024:.1f} MB)")
|
|
732
|
+
except Exception as e:
|
|
733
|
+
print(f"[build_nsis_installer] ⚠️ Échec de la création de l'archive: {e}")
|
|
734
|
+
|
|
735
|
+
# Créer un petit dossier contenant uniquement python.exe/pw pour fallback
|
|
736
|
+
try:
|
|
737
|
+
if python_embed_dst.exists():
|
|
738
|
+
shutil.rmtree(python_embed_dst, ignore_errors=True)
|
|
739
|
+
python_embed_dst.mkdir(parents=True, exist_ok=True)
|
|
740
|
+
src_py = python_embed_src / "python.exe"
|
|
741
|
+
src_pw = python_embed_src / "pythonw.exe"
|
|
742
|
+
if src_py.exists():
|
|
743
|
+
shutil.copy2(src_py, python_embed_dst / "python.exe")
|
|
744
|
+
if src_pw.exists():
|
|
745
|
+
shutil.copy2(src_pw, python_embed_dst / "pythonw.exe")
|
|
746
|
+
# Compter les fichiers du petit dossier
|
|
747
|
+
file_count = sum(1 for _ in python_embed_dst.rglob('*') if _.is_file())
|
|
748
|
+
print(f"[build_nsis_installer] ✓ Petit dossier fallback: {file_count} fichier(s)")
|
|
749
|
+
except Exception as e:
|
|
750
|
+
print(f"[build_nsis_installer] ⚠️ Erreur création dossier fallback: {e}")
|
|
751
|
+
# Créer un script batch d'extraction qui sera exécuté lors de l'installation
|
|
752
|
+
try:
|
|
753
|
+
extract_bat = payload_dir / "extract_python.bat"
|
|
754
|
+
extract_content = (
|
|
755
|
+
"@echo off\r\n"
|
|
756
|
+
"REM Extraction de python_embeddable.zip vers le dossier python_embeddable\r\n"
|
|
757
|
+
"powershell -NoProfile -ExecutionPolicy Bypass -Command \"try { Expand-Archive -LiteralPath '%~dp0python_embeddable.zip' -DestinationPath '%~dp0python_embeddable' -Force } catch { exit 0 }\"\r\n"
|
|
758
|
+
"exit /b %ERRORLEVEL%\r\n"
|
|
759
|
+
)
|
|
760
|
+
with open(extract_bat, 'w', encoding='utf-8') as f:
|
|
761
|
+
f.write(extract_content)
|
|
762
|
+
print(f"[build_nsis_installer] ✓ Script d'extraction créé: {extract_bat.name}")
|
|
763
|
+
except Exception as e:
|
|
764
|
+
print(f"[build_nsis_installer] ⚠️ Erreur création script d'extraction: {e}")
|
|
765
|
+
|
|
766
|
+
# === ÉTAPE 3: Copier l'icône ===
|
|
767
|
+
if icon_path:
|
|
768
|
+
icon_path = Path(icon_path).resolve()
|
|
769
|
+
found_icon = None
|
|
770
|
+
# Chercher l'icône à la racine du projet
|
|
771
|
+
root_icon = Path(app_src) / "icon.ico"
|
|
772
|
+
if root_icon.exists():
|
|
773
|
+
found_icon = root_icon
|
|
774
|
+
elif icon_path.exists():
|
|
775
|
+
found_icon = icon_path
|
|
776
|
+
# Sinon, chercher dans assets
|
|
777
|
+
assets_icon = Path(app_src) / "assets" / "icon.ico"
|
|
778
|
+
if not found_icon and assets_icon.exists():
|
|
779
|
+
found_icon = assets_icon
|
|
780
|
+
if found_icon:
|
|
781
|
+
assets_dir = payload_dir / "assets"
|
|
782
|
+
assets_dir.mkdir(parents=True, exist_ok=True)
|
|
783
|
+
shutil.copy2(found_icon, assets_dir / "icon.ico")
|
|
784
|
+
print(f"[build_nsis_installer] ✓ Icône copiée: {found_icon}")
|
|
785
|
+
else:
|
|
786
|
+
print(f"[build_nsis_installer] ⚠️ Icône non trouvée à la racine, dans assets ou au chemin fourni: {icon_path}")
|
|
787
|
+
|
|
788
|
+
# === ÉTAPE 3bis: Créer le launcher.exe compilé ===
|
|
789
|
+
launcher_exe = payload_dir / "launcher.exe"
|
|
790
|
+
|
|
791
|
+
# Essayer de compiler le launcher C avec le bon point d'entrée
|
|
792
|
+
print(f"[build_nsis_installer] 🔨 Compilation du launcher avec le point d'entrée: {entry_file_name}")
|
|
793
|
+
compilation_success = compile_launcher_c(launcher_exe, gui_mode=gui_mode, app_src=app_src, entry_file=entry_file_name)
|
|
794
|
+
|
|
795
|
+
if not compilation_success:
|
|
796
|
+
# Fallback: copier python.exe si la compilation échoue
|
|
797
|
+
print(f"[build_nsis_installer] 🔄 Fallback: utilisation de python.exe comme launcher")
|
|
798
|
+
if python_embed_dst.exists():
|
|
799
|
+
pythonw_path = python_embed_dst / "python.exe"
|
|
800
|
+
if pythonw_path.exists():
|
|
801
|
+
shutil.copy2(pythonw_path, launcher_exe)
|
|
802
|
+
print(f"[build_nsis_installer] ✓ Launcher .exe créé (copie de python.exe)")
|
|
803
|
+
else:
|
|
804
|
+
python_path = python_embed_dst / "python.exe"
|
|
805
|
+
if python_path.exists():
|
|
806
|
+
shutil.copy2(python_path, launcher_exe)
|
|
807
|
+
print(f"[build_nsis_installer] ✓ Launcher .exe créé (copie de python.exe)")
|
|
808
|
+
|
|
809
|
+
# === ÉTAPE 3ter: Appliquer l'icône et métadonnées au launcher avec rcedit ===
|
|
810
|
+
if launcher_exe.exists():
|
|
811
|
+
print(f"[build_nsis_installer] 🎨 Application des métadonnées au launcher...")
|
|
812
|
+
try:
|
|
813
|
+
# Chercher rcedit.exe dans le vendor
|
|
814
|
+
build_tools_dir = Path(__file__).parent.parent / "build_tools"
|
|
815
|
+
rcedit_paths = [
|
|
816
|
+
build_tools_dir / "vendor" / "rcedit" / "node_modules" / "rcedit" / "bin" / "rcedit.exe",
|
|
817
|
+
build_tools_dir / "vendor" / "rcedit" / "node_modules" / "rcedit" / "bin" / "rcedit-x64.exe",
|
|
818
|
+
]
|
|
819
|
+
|
|
820
|
+
rcedit_bin = None
|
|
821
|
+
for p in rcedit_paths:
|
|
822
|
+
if p.exists():
|
|
823
|
+
rcedit_bin = p
|
|
824
|
+
break
|
|
825
|
+
|
|
826
|
+
if rcedit_bin:
|
|
827
|
+
# Préparer les arguments rcedit
|
|
828
|
+
rcedit_cmd = [str(rcedit_bin), str(launcher_exe)]
|
|
829
|
+
|
|
830
|
+
# Ajouter l'icône si disponible
|
|
831
|
+
assets_dir = payload_dir / "assets"
|
|
832
|
+
icon_file = assets_dir / "icon.ico"
|
|
833
|
+
if icon_file.exists():
|
|
834
|
+
print(f"[build_nsis_installer] - Icône: {icon_file}")
|
|
835
|
+
rcedit_cmd.extend(["--set-icon", str(icon_file)])
|
|
836
|
+
else:
|
|
837
|
+
print(f"[build_nsis_installer] ⚠️ Icône non trouvée: {icon_file}")
|
|
838
|
+
|
|
839
|
+
# Ajouter les métadonnées version
|
|
840
|
+
print(f"[build_nsis_installer] - ProductName: {app_name}")
|
|
841
|
+
print(f"[build_nsis_installer] - Version: {version}")
|
|
842
|
+
print(f"[build_nsis_installer] - Company: {company}")
|
|
843
|
+
|
|
844
|
+
rcedit_cmd.extend([
|
|
845
|
+
"--set-version-string", "ProductName", app_name,
|
|
846
|
+
"--set-version-string", "FileDescription", description or f"Application {app_name}",
|
|
847
|
+
"--set-version-string", "CompanyName", company,
|
|
848
|
+
"--set-version-string", "LegalCopyright", copyright or f"© 2024 {company}",
|
|
849
|
+
"--set-version-string", "OriginalFilename", f"{app_name}.exe",
|
|
850
|
+
"--set-version-string", "InternalName", app_name,
|
|
851
|
+
"--set-file-version", version,
|
|
852
|
+
"--set-product-version", version,
|
|
853
|
+
])
|
|
854
|
+
|
|
855
|
+
# Exécuter rcedit
|
|
856
|
+
print(f"[build_nsis_installer] Exécution de rcedit...")
|
|
857
|
+
result = subprocess.run(rcedit_cmd, capture_output=True, text=True, encoding='utf-8', errors='replace')
|
|
858
|
+
if result.returncode == 0:
|
|
859
|
+
print(f"[build_nsis_installer] ✓ Métadonnées appliquées au launcher")
|
|
860
|
+
else:
|
|
861
|
+
print(f"[build_nsis_installer] ⚠️ Erreur rcedit (code {result.returncode})")
|
|
862
|
+
if result.stdout:
|
|
863
|
+
print(f"[build_nsis_installer] stdout: {result.stdout[:200]}")
|
|
864
|
+
if result.stderr:
|
|
865
|
+
print(f"[build_nsis_installer] stderr: {result.stderr[:200]}")
|
|
866
|
+
else:
|
|
867
|
+
print(f"[build_nsis_installer] ℹ️ rcedit.exe non trouvé - métadonnées non appliquées")
|
|
868
|
+
except Exception as e:
|
|
869
|
+
print(f"[build_nsis_installer] ⚠️ Erreur lors de l'application des métadonnées: {e}")
|
|
870
|
+
|
|
871
|
+
# === ÉTAPE 3quater: Renommer launcher.exe en {app_name}.exe ===
|
|
872
|
+
if launcher_exe.exists():
|
|
873
|
+
app_exe = payload_dir / f"{app_name}.exe"
|
|
874
|
+
shutil.move(str(launcher_exe), str(app_exe))
|
|
875
|
+
print(f"[build_nsis_installer] ✓ Launcher renommé en: {app_name}.exe")
|
|
876
|
+
launcher_exe = app_exe # Mettre à jour la variable pour les étapes suivantes
|
|
877
|
+
|
|
878
|
+
# === ÉTAPE 4: Générer le fichier NSI ===
|
|
879
|
+
print(f"[build_nsis_installer] 📝 Génération du script NSIS...")
|
|
880
|
+
|
|
881
|
+
# Utiliser le template Python spécifique
|
|
882
|
+
nsis_template = Path(__file__).parent / "templates" / "nsis_template_python.nsi"
|
|
883
|
+
if not nsis_template.exists():
|
|
884
|
+
raise FileNotFoundError(f"Template NSIS non trouvé: {nsis_template}")
|
|
885
|
+
|
|
886
|
+
nsi_file = dist_dir / "installer.nsi"
|
|
887
|
+
with open(nsis_template, "r", encoding="utf-8") as f:
|
|
888
|
+
nsi_content = f.read()
|
|
889
|
+
|
|
890
|
+
# Remplacer les variables (format NSIS: ${VAR})
|
|
891
|
+
# Utiliser des chemins ABSOLUS pour que NSIS les trouve
|
|
892
|
+
payload_dir_abs = (payload_dir).resolve()
|
|
893
|
+
assets_dir_abs = payload_dir_abs / "assets"
|
|
894
|
+
|
|
895
|
+
replacements = {
|
|
896
|
+
'${PRODUCT_NAME}': app_name,
|
|
897
|
+
'${VERSION}': version,
|
|
898
|
+
'${COMPANY_NAME}': company,
|
|
899
|
+
'${APP_DESCRIPTION}': description or f"Application {app_name}",
|
|
900
|
+
'${COPYRIGHT}': copyright or f"© 2024 {company}",
|
|
901
|
+
'${HELP_LINK}': "",
|
|
902
|
+
'${ABOUT_URL}': "",
|
|
903
|
+
'${UPDATE_URL}': "",
|
|
904
|
+
'${PAYLOAD_DIR}': str(payload_dir_abs).replace('/', '\\'), # Chemin ABSOLU
|
|
905
|
+
'${OUTPUT_SETUP_EXE}': str(output_exe).replace('/', '\\'),
|
|
906
|
+
'${APP_ICON}': str(assets_dir_abs / "icon.ico").replace('/', '\\') if icon_path else "",
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
for key, value in replacements.items():
|
|
910
|
+
nsi_content = nsi_content.replace(key, value)
|
|
911
|
+
|
|
912
|
+
with open(nsi_file, "w", encoding="utf-8") as f:
|
|
913
|
+
f.write(nsi_content)
|
|
914
|
+
print(f"[build_nsis_installer] ✓ Script NSI généré")
|
|
915
|
+
|
|
916
|
+
# === ÉTAPE 5: Trouver NSIS ===
|
|
917
|
+
print(f"[build_nsis_installer] 🔍 Recherche de makensis.exe...")
|
|
918
|
+
|
|
919
|
+
# NSIS est dans build_tools/vendor, pas build_tools_py/vendor
|
|
920
|
+
build_tools_dir = Path(__file__).parent.parent / "build_tools"
|
|
921
|
+
|
|
922
|
+
nsis_paths = [
|
|
923
|
+
build_tools_dir / "vendor" / "nsis" / "nsis-3.09" / "Bin" / "makensis.exe",
|
|
924
|
+
build_tools_dir / "vendor" / "nsis" / "nsis-3.09" / "makensis.exe",
|
|
925
|
+
build_tools_dir / "vendor" / "nsis" / "makensis.exe",
|
|
926
|
+
Path(__file__).parent / "vendor" / "nsis" / "nsis-3.09" / "Bin" / "makensis.exe",
|
|
927
|
+
Path(__file__).parent / "vendor" / "nsis" / "nsis-3.09" / "makensis.exe",
|
|
928
|
+
Path(__file__).parent / "vendor" / "nsis" / "makensis.exe",
|
|
929
|
+
]
|
|
930
|
+
|
|
931
|
+
nsis_bin = None
|
|
932
|
+
for p in nsis_paths:
|
|
933
|
+
if p.exists():
|
|
934
|
+
nsis_bin = p
|
|
935
|
+
print(f"[build_nsis_installer] ✓ NSIS trouvé à: {p}")
|
|
936
|
+
break
|
|
937
|
+
|
|
938
|
+
if not nsis_bin:
|
|
939
|
+
# Chercher dans le PATH
|
|
940
|
+
nsis_bin_path = shutil.which("makensis.exe")
|
|
941
|
+
if nsis_bin_path:
|
|
942
|
+
nsis_bin = Path(nsis_bin_path)
|
|
943
|
+
print(f"[build_nsis_installer] ✓ NSIS trouvé dans PATH: {nsis_bin}")
|
|
944
|
+
|
|
945
|
+
if not nsis_bin:
|
|
946
|
+
print(f"[build_nsis_installer] ❌ makensis.exe introuvable")
|
|
947
|
+
print(f"[build_nsis_installer] Chemins vérifiés:")
|
|
948
|
+
for p in nsis_paths:
|
|
949
|
+
print(f" - {p}: {'✓ EXISTS' if p.exists() else '✗ NOT FOUND'}")
|
|
950
|
+
raise FileNotFoundError(f"makensis.exe non trouvé. Vérifiez que NSIS est installé.")
|
|
951
|
+
|
|
952
|
+
# === ÉTAPE 6: Créer le répertoire de sortie ===
|
|
953
|
+
output_exe.parent.mkdir(parents=True, exist_ok=True)
|
|
954
|
+
|
|
955
|
+
# === ÉTAPE 7: Générer l'installateur ===
|
|
956
|
+
print(f"[build_nsis_installer] 🔨 Génération de l'installateur NSIS...")
|
|
957
|
+
print(f"[build_nsis_installer] Répertoire de travail: {dist_dir}")
|
|
958
|
+
print(f"[build_nsis_installer] Script: {nsi_file}")
|
|
959
|
+
print(f"[build_nsis_installer] Sortie: {output_exe}")
|
|
960
|
+
print()
|
|
961
|
+
|
|
962
|
+
result = subprocess.run(
|
|
963
|
+
[str(nsis_bin), f"/DOUTPUT_SETUP_EXE={output_exe}", str(nsi_file)],
|
|
964
|
+
cwd=str(dist_dir),
|
|
965
|
+
capture_output=False, # Afficher la sortie en temps réel
|
|
966
|
+
text=True
|
|
967
|
+
)
|
|
968
|
+
|
|
969
|
+
print()
|
|
970
|
+
|
|
971
|
+
if result.returncode != 0:
|
|
972
|
+
print(f"[build_nsis_installer] ❌ makensis a échoué avec le code {result.returncode}")
|
|
973
|
+
raise RuntimeError(f"makensis a échoué avec le code {result.returncode}")
|
|
974
|
+
|
|
975
|
+
if not output_exe.exists():
|
|
976
|
+
raise FileNotFoundError(f"L'installateur n'a pas été généré: {output_exe}")
|
|
977
|
+
|
|
978
|
+
print(f"[build_nsis_installer] ✅ Installateur généré avec succès!")
|
|
979
|
+
print(f"[build_nsis_installer] Fichier: {output_exe}")
|
|
980
|
+
print(f"[build_nsis_installer] Taille: {output_exe.stat().st_size / (1024*1024):.2f} MB")
|
|
981
|
+
|
|
982
|
+
# === RÉSUMÉ DÉTAILLÉ ===
|
|
983
|
+
safe_print("\n" + "=" * 60)
|
|
984
|
+
safe_print("[OK] BUNDLE CREE AVEC SUCCES!")
|
|
985
|
+
safe_print("=" * 60)
|
|
986
|
+
|
|
987
|
+
def safe_getsize(f):
|
|
988
|
+
try:
|
|
989
|
+
return os.path.getsize(f)
|
|
990
|
+
except (FileNotFoundError, OSError):
|
|
991
|
+
return 0
|
|
992
|
+
|
|
993
|
+
def safe_calculate_size(path):
|
|
994
|
+
"""Calcule la taille totale en ignorant les erreurs de chemin invalide"""
|
|
995
|
+
try:
|
|
996
|
+
total = 0
|
|
997
|
+
for item in path.rglob('*'):
|
|
998
|
+
if item.is_file():
|
|
999
|
+
total += safe_getsize(item)
|
|
1000
|
+
return total / (1024*1024)
|
|
1001
|
+
except (FileNotFoundError, OSError):
|
|
1002
|
+
return 0
|
|
1003
|
+
|
|
1004
|
+
total_size = safe_calculate_size(Path(OUTPUT_DIR))
|
|
1005
|
+
python_size = safe_calculate_size(Path(OUTPUT_DIR) / "python_embeddable") if (Path(OUTPUT_DIR) / "python_embeddable").exists() else 0
|
|
1006
|
+
app_size = safe_calculate_size(Path(OUTPUT_DIR) / "app") if (Path(OUTPUT_DIR) / "app").exists() else 0
|
|
1007
|
+
|
|
1008
|
+
safe_print(f"\n[STRUCTURE]")
|
|
1009
|
+
safe_print(f" - python_embeddable/ (Python {get_python_version()[0]}.{get_python_version()[1]}): {python_size:.1f} MB")
|
|
1010
|
+
safe_print(f"\n[RESUME]")
|
|
1011
|
+
safe_print(f" Taille totale: {total_size:.1f} MB")
|
|
1012
|
+
safe_print(f" Python: {get_python_dll_name()}")
|
|
1013
|
+
safe_print(f" Packages: {len(all_packages)} detectes" if all_packages else " Packages: Aucun")
|
|
1014
|
+
|
|
1015
|
+
return str(output_exe)
|
|
1016
|
+
|
|
1017
|
+
finally:
|
|
1018
|
+
# Nettoyer le répertoire temporaire
|
|
1019
|
+
shutil.rmtree(dist_dir, ignore_errors=True)
|
|
1020
|
+
def parse_args():
|
|
1021
|
+
p = argparse.ArgumentParser(description="Génère un installateur NSIS pour une app Python")
|
|
1022
|
+
p.add_argument("--app-src", required=True, help="Chemin vers le dossier source de l'application à packager")
|
|
1023
|
+
p.add_argument("--output", required=True, help="Chemin de l'installateur de sortie (.exe)")
|
|
1024
|
+
p.add_argument("--app-name", required=True, help="Nom de l'application")
|
|
1025
|
+
p.add_argument("--version", default="1.0.0", help="Version de l'application (défaut: 1.0.0)")
|
|
1026
|
+
p.add_argument("--company", default="test", help="Nom de la compagnie (défaut: test)")
|
|
1027
|
+
p.add_argument("--description", default="", help="Description de l'application")
|
|
1028
|
+
p.add_argument("--copyright", default="", help="Informations de copyright")
|
|
1029
|
+
p.add_argument("--icon", default=None, help="Chemin vers l'icône (.ico)")
|
|
1030
|
+
p.add_argument("--gui", action="store_true", help="Compiler en mode GUI (pas de console). Par défaut: console")
|
|
1031
|
+
p.add_argument("--python-embed", default=None, help="Chemin vers un Python embarqué personnalisé (ex: python-embed-amd64). Par défaut: Python système")
|
|
1032
|
+
return p.parse_args()
|
|
1033
|
+
|
|
1034
|
+
if __name__ == "__main__":
|
|
1035
|
+
args = parse_args()
|
|
1036
|
+
try:
|
|
1037
|
+
output = build_nsis_installer(
|
|
1038
|
+
args.app_src, # utiliser app_src
|
|
1039
|
+
args.output,
|
|
1040
|
+
args.app_name,
|
|
1041
|
+
args.version,
|
|
1042
|
+
company=args.company,
|
|
1043
|
+
description=args.description,
|
|
1044
|
+
copyright=args.copyright,
|
|
1045
|
+
icon_path=args.icon,
|
|
1046
|
+
gui_mode=args.gui,
|
|
1047
|
+
python_embed_path=args.python_embed
|
|
1048
|
+
)
|
|
1049
|
+
print(f"\n✅ Succès! Installateur: {output}")
|
|
1050
|
+
except Exception as e:
|
|
1051
|
+
print(f"\n❌ Erreur: {e}")
|
|
1052
|
+
import traceback
|
|
1053
|
+
traceback.print_exc()
|
|
1054
|
+
exit(1)
|