Français
English
Afin de construire facilement une version Linux et une version Windows
de mes créations en Python et wxPython, j'ai
expérimenté la mise en place de la création
d'éxécutables pour Windows depuis Linux.
- Objectif
- Prérequis
- Procédure
- Installer wine
- Installation de
python, wxpython
- Configuration de Wine
- Version = winxp
- shell32.dll
- Utilisation de Python
- Installation de
McMillan's Python Installer
- Installation
- Configuration
- Utilisation
- Inno Setup
- Installation
- Compilation
- Conclusion
- Licence
- Authors
- Changelog
Objectif
Construire un environement de création
d'éxécutable
windows (installeur compris) depuis Linux
Prérequis
La solution que j'ai mis en place se base sur les outils suivants :
- Wine (wine-20040213-3mdk,
Mandrake 10 official)
- Python 2.3 pour
windows
- wxPython
2.5 support unicode pour windows (pas vraiment nécessaire)
- Gordon
McMillan's Python Installer Le site de l'auteur est actuellement
indisponible
- Inno setup
pour construire l'installeur Windows
- Une licence de windows (pour la dll shell32.dll)
Procédure
Installer wine
urpmi wine
devrais faire l'affaire avec Mandrake 10.
Consultez la documentation pour d'autres distributions, je n'ai pas
testé le résultat avec une version différente de
wine-20040213-3mdk.
Installation de
python, wxpython
Les différentes installations devaient se dérouler sans
poser de soucis, utilisez simpement wine avec :
wine nomdusetup.exe
et suivez les indications
Configuration de Wine
Reportez vous à la
documentation de wine
pour la configuration générale
Version = winxp
Pour la configuration de Wine, j'ai du préciser :
[Version]
"Windows" = "winxp"
Si j'utilise une autre valeur ici, python ne veut pas se lancer.
shell32.dll
Si vous lancez python sans installer le shell32.dll vous aurez ceci :
$ /usr/bin/wine /var/lib/wine/Python23/python.exe
err:module:import_dll Loading module (file) SHELL32.dll (which is
needed by L"C:\\windows\\system\\python23.dll") failed (error
c0000020).
err:module:import_dll No implementation for SHELL32.dll.ShellExecuteA
imported from L"C:\\windows\\system\\python23.dll", setting to
0xdeadbeef
Commencez donc par installer la dll dans votre installation wine dans
le répertoire correspondant
à :
c:\windows\system32\
(c: est défini dans
~/.wine/config
)
Pour la configuration du choix des dll (dans
~/.wine/config
),
j'ai utilisé la
configuration de base de Mandrake :
[DllOverrides]
"oleaut32" = "builtin, native"
"ole32" = "builtin, native"
"comdlg32" = "builtin, native"
"shell32" = "builtin, native"
"shfolder" = "builtin, native"
"shlwapi" = "builtin, native"
"shdocvw" = "builtin, native"
"advapi32" = "builtin, native"
"msvcrt" = "native, builtin"
"mciavi.drv" = "native, builtin"
"mcianim.drv" = "native, builtin"
"msi" = "native, builtin"
"riched32" = "native, builtin"
"stdole.tlb" = "native, builtin"
"stdole2.tlb" = "native, builtin"
"stdole32.tlb" = "native, builtin"
"MFC42" = "native, builtin"
"*" = "builtin, native"
Utilisation de Python
Arrivé à cette étape, je dois être capable
de lancer python avec wine :
$ /usr/bin/wine /var/lib/wine/Python23/python.exe
fixme:console:SetConsoleCtrlHandler (0x77c331db,1) - no
error checking
or testing yet
Python 2.3.4 (#53, May 25 2004, 21:17:02) [MSC v.1200 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
pour executer un programme python, n'oubliez pas les -- pour
séparer les paramètres wine des paramètres python
:
/usr/bin/wine /var/lib/wine/Python23/python.exe -- foobar.py
Installation de
McMillan's Python Installer
Installation
In suffit de décompresser l'installeur dans un sous dossier du
répertoire racine de votre projet. Apparement, ça ne
fonctionne pas si l'installeur se trouve dans un autre disque
(configuration de wine) ou dans un répertoire.
Configuration
D'après la doc :
python Configure.py
ce qui donne :
fixme:console:SetConsoleCtrlHandler (0x77c331db,1) - no error checking
or testing yet
fixme:console:SetConsoleCtrlHandler (0x1e081940,1) - no error checking
or testing yet
I: computing EXE_dependencies
err:module:import_dll No implementation for
ADVAPI32.dll.GetEffectiveRightsFromAclW imported from
L"C:\\windows\\system\\pywintypes23.dll", setting to 0xdeadbeef
err:module:import_dll No implementation for
ADVAPI32.dll.GetAuditedPermissionsFromAclW imported from
L"C:\\windows\\system\\pywintypes23.dll", setting to 0xdeadbeef
I: Finding TCL/TK...
I: found TCL/TK version 8.4
I: testing for Zlib...
I: ... Zlib available
I: Testing for ability to set icons, version resources...
Configure.py:113: DeprecationWarning: Non-ASCII character '\x92' in
file E:\PROJETS\PACK~ZH3\OOOPM\OOOPM\INST~4Z2\versionInfo.py on line
171, but no encoding declared; see
http://www.python.org/peps/pep-0263.html for details
import win32api, icon, versionInfo
fixme:resource:BeginUpdateResourceA ("H:\\me_test_exe.tmp",0): stub
I: ... resource update unavailable - win32api.BeginUpdateResource
failed
I: Testing for Unicode support...
I: ... Unicode available
I: testing for UPX...
I: ...exception result in testing for UPX
[Errno 2] No such file or directory: 'upx.txt'
(2, 'No such file or directory')
I: computing PYZ dependencies...
On peut constater plusieurs choses :
- TCL/TK = OK (pas
testé)
- Zlib = OK (pas
testé)
- "ability to set icons" = Pas
OK On ne pourra pas placer d'icône dans
l'éxécutable, pas très grave
- Unicode = OK (pas
testé)
- UPX = Pas OK Bien
que installé, upx n'est pas détecté. Il est
toujours possible de l'utiliser indépendament. Remarque :
L'installeur sera plus petit si vous n'utilisez pas upx.
Utilisation
Création du fichier spec :
/usr/bin/wine /var/lib/wine/Python23/python.exe
Installer/Makespec.py monscript.py
Préférez l'utilisation d'un éditeur de
texte pour le fichier spec à la surcharge de la ligne de
commande.
Note :
--onefile ne fonctionne pas
--icon ne fonctionne pas (pas d'icone dans l'exe)
Création de l'éxécutable avec :
/usr/bin/wine /var/lib/wine/Python23/python.exe
Installer/Build.py monscript.spec
Inno Setup
Installation
Installez inno avec wine. J'ai pu utiliser inno avec mon fichier iss en
plaçant inno dans un sous répertoire du répertoire
racine du projet.
Compilation
Pour compiler sans utiliser l'interface graphique, utilisez :
wine Inno/ISCC.exe -- setup.iss
un fichier setup.exe est crée dans le répertoire Output/.
Je n'ai pas trouvé de solution permettant d'utiliser les exe
créés avec McMillan's Python Installer (depuis
GNU/Linux), cette fois ci, windows
est nécessaire pour tester.
Conclusion
J'espère que cette "documentation" (prise de notes) sera utile
à quelqu'un un jour.
Licence
GPL
Authors
Florent Manens
Translated to
English by Stefaan
Verscheure
and Brian van den Broek
Changelog
jui 19 2004:
* translated to English thanks to the help of
Stefaan Verscheure and Brian
van den Broek
* corrected sentence with no sens
jui 18 2004:
* initial revision