Build: embarquer les executables auxiliaires de pywinpty

PyInstaller ne suit que les bibliotheques liees : il embarquait winpty.dll et
conpty.dll, mais ignorait les deux executables que pywinpty lance en
sous-processus pour creer la pseudo-console. Resultat, l'application se
lancait normalement mais tous les terminaux se fermaient instantanement
("Deconnecte (Terminal ferme)") — un defaut invisible en mode script, ou les
fichiers sont presents dans l'environnement virtuel.

- OpenConsole.exe : hote du backend ConPTY (celui utilise par defaut)
- winpty-agent.exe : requis par le repli WinPTY

Ils sont localises dans le paquet installe au moment du build, donc la recette
reste valable sur n'importe quel poste. Verifie sur l'executable produit :
OpenConsole.exe et powershell.exe apparaissent bien comme processus enfants.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
snoopy
2026-09-04 07:01:00 +02:00
parent b977842186
commit 81d5d8c75b
2 changed files with 21 additions and 1 deletions

View File

@@ -7,14 +7,28 @@ d'attente a chaque demarrage. Le dossier demarre instantanement et se copie tout
aussi bien sur une cle USB.
"""
import os
import winpty
block_cipher = None
# pywinpty s'appuie sur deux executables auxiliaires que PyInstaller n'embarque pas
# tout seul (il ne suit que les DLL liees) : OpenConsole.exe pour le backend ConPTY,
# winpty-agent.exe pour le repli WinPTY. Sans eux, la pseudo-console se ferme
# instantanement au demarrage et les terminaux restent vides.
_winpty_dir = os.path.dirname(winpty.__file__)
_winpty_helpers = [
(os.path.join(_winpty_dir, name), "winpty")
for name in ("OpenConsole.exe", "winpty-agent.exe")
if os.path.exists(os.path.join(_winpty_dir, name))
]
a = Analysis(
["main.py"],
pathex=[],
binaries=[],
# la feuille de style est lue au runtime : elle doit voyager avec l'application
datas=[("resources/theme.qss", "resources")],
datas=[("resources/theme.qss", "resources")] + _winpty_helpers,
hiddenimports=["winpty"],
hookspath=[],
hooksconfig={},