# -*- coding: utf-8 -*- # Copyright (C) 2007-2012 Olivier Ponchaut - Dominique Levray # and Lama Angelo (Historical developper of EKD) # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ############################################ # Début de la doc à suivre de la préparation et de la compilation ############################################ # ------------------------------------------- # 1) PREPARATION # ------------------------------------------- # A) Tout d'abord il faut télécharger l'application suivante: # Microsoft Visual C++ 2008 Redistributable Package (x86), c'est à dire: # Microsoft Visual Studio 2008 ... elle peut se télécharger ici # (ou faire une recherche dans Google): # http://www.microsoft.com/download/en/confirmation.aspx?id=29 # ATTENTION !!!, il faut bien vérifier que l'on installe la version: 9.0.21022.8 # ... et pas la version: Microsoft Visual C++ 2008 SP1 Redistributable Package (x86) # Ensuite il faut installer l'exécutable: vcredist_x86.exe # Une fois cela fait, des dll et fichiers Manifest supplémentaires auront été installés # dans C:\WINDOWS\WinSxS (ici l'exemple d'une installation sous Windows XP ). # Dans Windows Seven, ce chemin ne sera pas présent. # ------------------------------------------- # B) Faire une recherche sur la machine pour savoir où se trouve les fichiers, pour # cela il faut aller dans démarrer > Rechercher (cliquer sur la ligne: Tous les fichiers # et tous les dossiers, inscrire: x86_Microsoft.VC90.CRT ... dans le champ de texte: # Une partie ou l'ensemble du nom de fichier ... et cliquer sur le bouton Rechercher. # Sous Windows XP cela se trouvera dans C:\WINDOWS\WinSxS (sous windows Seven, # vous ne trouverez pas ce fichier). Il n'est pas nécessaire de renseigner cette variable # sous Windows Vista et windows Seven. # *** Sous Windows XP, pour être certain de trouver le dossier racine, faites plutôt une recherche # en inscrivant: WinSxS (et en cliquant sur le bouton Rechercher, comme vu précédemment). # ------------------------------------------- # C) Télécharger la version portable d'EKD (l'archive 7zip), la décompacter et ouvrir le # fichier: setup-py2exe.py ... (l'ouvrir avec Scite, au besoin le télécgarger et l'installer), # renseigner la variable nommée chemin avec le chemin exact touvé avec Rechercher (en # n'oubliant pas de mettre le dossier WinSxS dans le chemin, sous Windows XP ce sera: # chemin = 'C:\WINDOWS\WinSxS' # ... après cela ne pas oublier d'enregistrer les modifications apportées dans ce fichier # setup-py2exe.py ######################################################################################### # NE PAS OUBLIER NON PLUS (!!!) de mondifier la variable nommée VERSION (que ce soit # sous Windows XP, Vista et Seven) ... et d'y mettre la version actuelle d'EKD (!!!) # ... ceci bien entendu dans le fichier: setup-py2exe.py ######################################################################################### # ------------------------------------------- # D) Télécharger la dll msvcp90.dll (--> http://www.dll-files.com/dllindex/dll-files.shtml?msvcp90) # la décompacter ... et la mettre dans le répertoire du kit windows portable (cela est indispensable # pour ne pas avoir d'erreurs lors de la compilation). # ------------------------------------------- # 2) COMPILATION # ------------------------------------------- # Pour générer la version windows, il faut ouvrir une fenêtre MS-DOS et se positionner # dans le répertoire où se trouve le kit windows ekd portable une fois mise à jour avec le # script kit_windows.py), il faut ensuite lancer la commande : # C:\Python27\python.exe setup-py2exe.py py2exe # ... cela crée la version portable compilée dans le répertoire windist. Pour finir (à la # toute fin de la compilation) le répertoire EnKoDeurMixeurPortable_année-mois-jour # aura été généré ... il vous suffira de compresser ce répertoire (par exemple avec 7zip). # ------------------------------------------- # Complément d'info : dans le kit windows portable la structure suivante sera déjà # présente dans le répertoire windist : les répertoires PyQt4, tcl et windows, les # autres répertoires et fichiers seront générés par le kit windows ekd portable (script # kit_windows.py). # ------------------------------------------- # Ceci n'est pas à faire par l'utilisateur (c'est juste pour info) : prendre tous les # fichiers dll contenus dans : Python27\Lib\site-packages\PyQt4\plugins\imageformats # et les copier dans : windist\PyQt4\Plugins\imageformats, ensuite créer le fichier qt.conf # (à la racine du rep. windist) et y mettre le contenu suivant : # [Paths] # Prefix = ./PyQt4 # ------------------------------------------- ############################################ # Fin de la doc à suivre de la préparation et de la compilation ############################################ # ------------------------------------------- # Complément d'info: pour faire apparaître la fenêtre MS-DOS sous Vista ou Seven: # "il suffit de maintenir enfoncé le bouton du clavier Windows et d'appuyer sur la lettre # 'R', une fenêtre Exécuter apparaitra, dans cette fenêtre il faudra taper 'cmd' sans les # guillemets bien entendu puis valider ... La fenêtre MS-DOS devrait s'afficher par la suite ..." # ... ou bien encore: # "... ordinateur , disque c , windows , system32 .. et la vous trouverez le cmd.exe (faire un # ty raccourcis sur le bureau peut s'averer pratique)." # ... plus simple encore: # "Menu démarrer --> dans le cadre rechercher taper: cmd et normalement y a cmd qui apparait." # Ref: http://www.commentcamarche.net/forum/affich-4043988-ouvrir-une-fenetre-de-commande-sous-vista # ------------------------------------------- # ----------------------------------------------- # # A MODIFIER SOUS TOUTES LES VERSIONS DE WINDOWS !!! # ----------------------------------------------- # VERSION = "3.1.2" # ----------------------------------------------- # # ----------------------------------------------- # # A MODIFIER UNIQUEMENT SOUS WINDOWS XP !!! # ----------------------------------------------- # # CE CHEMIN EST TRES IMPORTANT, IL DOIT # ETRE RENSEIGNE CORRECTEMENT SOUS WIN XP. # ----------------------------------------------- # # C'est le chemin où se trouvent les dll: # * msvcm90.dll # * msvcr90.dll # * msvcp90.dll # ... et le fichier Manifest # * x86_Microsoft.VC90.CRT_....Manifest # ----------------------------------------------- # chemin = 'C:\WINDOWS\WinSxS' # ----------------------------------------------- # # ----------------------------------------------- # # En fait sous windows seven, les dll recherchées (tout du moins la MSVCP90.dll) # semble(nt) se trouver dans C:\Windows\system32, voilà ce que lon obtient à la # fin de la compilation: # OLEAUT32.dll - C:\Windows\system32\OLEAUT32.dll # USER32.dll - C:\Windows\system32\USER32.dll # IMM32.dll - C:\Windows\system32\IMM32.dll # SHELL32.dll - C:\Windows\system32\SHELL32.dll # KERNEL32.dll - C:\Windows\system32\KERNEL32.dll # WINMM.dll - C:\Windows\system32\WINMM.dll # WSOCK32.dll - C:\Windows\system32\WSOCK32.dll # fftpack_lite.pyd - C:\Python27\lib\site-packages\numpy\fft\fftpack_lite.pyd # COMDLG32.dll - C:\Windows\system32\COMDLG32.dll # ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll # msvcrt.dll - C:\Windows\system32\msvcrt.dll # WS2_32.dll - C:\Windows\system32\WS2_32.dll # WINSPOOL.DRV - C:\Windows\system32\WINSPOOL.DRV # GDI32.dll - C:\Windows\system32\GDI32.dll # ole32.dll - C:\Windows\system32\ole32.dll # COMCTL32.dll - C:\Windows\system32\COMCTL32.dll # MSVCP90.dll - C:\Windows\system32\MSVCP90.dll # ----------------------------------------------- # import os, sys, platform, time, shutil from distutils.core import setup import py2exe from glob import glob # Collecte de la version de windows win_version = platform.release() # Répertoire VC90 dans l'arborescence repVC90 = 'windist' + os.sep + 'Microsoft.VC90.CRT' # Pour éviter les conflits, le chemin est eliminé s'il existe if os.path.exists(repVC90): shutil.rmtree(repVC90, ignore_errors=0, onerror=None) # Si le répertoire n'existe pas, il est crée if os.path.isdir(repVC90) is False: os.makedirs(repVC90) # Une fois Microsoft Visual Studio 2008 installé, il faut rechercher # où se trouvent les 3 dll: msvcm90.dll, msvcr90.dll et msvcp90.dll # (Microsoft.VC90.CRT) t1 = glob(chemin + '\*\msvcm90.dll') t2 = glob(chemin + '\*\msvcp90.dll') t3 = glob(chemin + '\*\msvcr90.dll') # Ensuite il faut rechercher le fichier Manifest de Microsoft.VC90.CRT t4 = glob(chemin + '\*\*.Manifest') l_manifest_1 = [lm1.split(os.sep) for lm1 in t4] l_manifest_2 = [os.sep.join(lm2) for lm2 in l_manifest_1 for lm3 in lm2 if 'Microsoft.VC90.CRT' in lm3] # Data préalable (liste contenant les 3 dll et le fichier Manifest) data = t1 + t2 +t3 + l_manifest_2 # Copie des 3 dll et du Manifest dans windist\\Microsoft.VC90.CRT for parc in data: shutil.copy(parc, 'windist'+os.sep+'Microsoft.VC90.CRT') # Si on est sous windows xp ... le fichier Manifest existe dans # l'arborescence de windows. Sous windows vista et 7, il n'existera pas. if win_version == "XP": # Renommage du fichier Manifest os.rename('windist'+os.sep+'Microsoft.VC90.CRT'+os.sep+os.path.basename(l_manifest_2[0]), 'windist'+os.sep+'Microsoft.VC90.CRT'+os.sep+'Microsoft.VC90.CRT.manifest') # (win_version --> 'Vista' ou '7') else: pass # Le data pour le setup (voir ici: http://www.py2exe.org/index.cgi/Tutorial#Step6) data = [("Microsoft.VC90.CRT", glob(r'windist\Microsoft.VC90.CRT\*.*'))] #data_files = data setup(data_files = data, name = "EKD", version = VERSION, description = "EKD - EnKoDeur Application of pre and post production image, movie and sound", author = "Angelo Lama", author_email = "ekd.forum@gmail.com", url = "http://ekd.tuxfamily.org", scripts = ["ekd.py"], windows=[{"script":"ekd_gui.py", "icon_resources": [(1, "icone_ekd.ico")]}], options={"py2exe":{ "includes":[ # addition python modules "sip","PyQt4.QtCore","PyQt4.QtGui", "pyexiv2","Image","StringIO", "numpy", "gettext" ],"optimize": 2, # 0 = don’t optimize (generate .pyc), 1 = normal optimization, 2 = extra optimization "bundle_files": 3, # This tells py2exe to bundle everything "dist_dir": 'windist', # Where to build the final files "xref" : False, # Create and show a module cross reference "skip_archive" : False, # True put files in the file system, False : in the python bytecode "ascii" : False, # False : include encodings "custom_boot_script" : '' # script to run at pyton startup (before the software) }}, long_description= """ EKD - EnKoDeur Application of pre and post production image, movie and sound """ ) # ============================================================= # # Utile pour définir les dates des mises à jour t = time.localtime() annee = str(t[0]) mois = str(t[1]) nb_mois = len(mois) jour = str(t[2]) nb_jour = len(jour) # Conditions d'utilisation # if nb_mois == 1: mois = '0'+mois else: mois = mois # if nb_jour == 1: jour = '0'+jour else: jour = jour # Attribution de la date de sortie de l'application (sous cette forme: # annee-mois-jour sans les -) et de façon automatique (donc sans reglage # pour l'utilisateur) date_version = annee + mois + jour separ = "# ----------------- #" # Elimination de l'ancien rep. s'il existait avant if os.path.exists('EnKoDeurMixeurPortable_'+annee+mois+jour): shutil.rmtree('EnKoDeurMixeurPortable_'+annee+mois+jour, ignore_errors=0, onerror=None) # Copie de toute l'arborescence du rep. windist ds le rep. de la version compilée shutil.copytree('windist', 'EnKoDeurMixeurPortable_'+annee+mois+jour) # Affichage fin de compilation selon les versions de Python if platform.python_version()[0] == '2': print "" print separ print "Compilation finie !!!" print separ print "" elif platform.python_version()[0] == '3': print("") print(separ) print("Compilation finie") print(separ) print("")