Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
cx_freeze_pyqt4_windows [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


cx_freeze_pyqt4_windows

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision Les deux révisions suivantes
cx_freeze_pyqt4_windows [2011/02/22 04:25]
tyrtamos
cx_freeze_pyqt4_windows [2013/03/29 08:34]
tyrtamos
Ligne 1: Ligne 1:
 ====== Diffusion de programmes PyQt4 autonomes sous Windows grâce à cx_freeze ====== ====== Diffusion de programmes PyQt4 autonomes sous Windows grâce à cx_freeze ======
  
 +[modernisation du setup.py le 29/3/2013]
  
 ===== Problématique ===== ===== Problématique =====
Ligne 54: Ligne 55:
   * Si votre programme comporte des modules à intégrer, placés dans des sous-répertoires, il faut citer ces sous-répertoires dans l'option "path"   * Si votre programme comporte des modules à intégrer, placés dans des sous-répertoires, il faut citer ces sous-répertoires dans l'option "path"
  
-  * il faut dire que la bibliothèque sip.pyd soit intégrée avec l'option "includes": ["sip"]+  * Pour PyQt4, il faut dire que la bibliothèque sip.pyd soit intégrée avec l'option "includes": ["sip"]
  
   * les fichiers et répertoires à copier en plus (ex: les fichiers d'aide) sont mentionnés avec l'option "include_files". Chaque copie demandée est un tuple composé du chemin source (absolu ou relatif) et du chemin destination (toujours relatif). Par exemple pour recopier un répertoire comportant les fichiers d'aide: "include_files": [("aide", "aide")]. Notez que les options comportent un blanc souligné et pas un tiret comme dit dans la notice de cx_freeze!   * les fichiers et répertoires à copier en plus (ex: les fichiers d'aide) sont mentionnés avec l'option "include_files". Chaque copie demandée est un tuple composé du chemin source (absolu ou relatif) et du chemin destination (toujours relatif). Par exemple pour recopier un répertoire comportant les fichiers d'aide: "include_files": [("aide", "aide")]. Notez que les options comportent un blanc souligné et pas un tiret comme dit dans la notice de cx_freeze!
Ligne 62: Ligne 63:
 Et c'est tout: avec ça, vous récupérez un répertoire avec tout ce qu'il faut pour une exécution "standalone" sur un Windows dans lequel il n'y a ni Python, ni PyQt4! Et c'est tout: avec ça, vous récupérez un répertoire avec tout ce qu'il faut pour une exécution "standalone" sur un Windows dans lequel il n'y a ni Python, ni PyQt4!
  
-Voilà un exemple de code du setup.py que j'ai utilisé pour un logiciel de concours photos pour un photo-club (environ 10000 lignes de code et utilisation de QtSql).+Voilà un exemple de code du setup.py que j'ai utilisé pour un logiciel de concours photos pour un photo-club (environ 25000 lignes de code et utilisation de QtSql).
  
-Pour que le setup.py puisse, sans modification, servir sous Windows et sous Linux, il faudra utiliser à plusieurs endroits les tests habituels de plateforme (if sys.platform == "win32" ou if sys.platform == "linux2") puisque certaines adresses de bibliothèques seront différentes. Peut-être que des adaptations mineures permettraient l'utilisation sur Mac OSX et plus (Solaris, ...) mais je n'ai aucune possibilité d'essayer.+Pour que le setup.py puisse, sans modification, servir sous Windows et sous Linux, il faudra utiliser à plusieurs endroits les tests habituels de plateforme (if sys.platform == "win32" ou if sys.platform == "linux2") puisque certaines adresses de bibliothèques seront différentes. Peut-être que des adaptations mineures permettraient l'utilisation sur Mac OSX et plus (Solaris, ...) mais je n'ai pas essayé.
  
 \\ \\
Ligne 71: Ligne 72:
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 # Python 2.7 # Python 2.7
-02/2011+03/2013 
 + 
 +""" 
 +Pas d'accent dans le setup, ni dans la description, ni dans les commentaires 
 + 
 +Icone sous Windows: il faut: 
 +=> un xxx.ico pour integration dans le exe, avec "icon=xxx.ico" 
 +=> un xxx.png pour integration avec PyQt4 + demander la copie avec includefiles.   
 +"""
    
 import sys, os import sys, os
Ligne 80: Ligne 89:
  
 # chemins de recherche des modules # chemins de recherche des modules
-path = sys.path + ["biblio", "consultations", "etatbase", "etiquettes",  +path = sys.path + ["bordereaux", "etiquettes", "fenetre", "integrebase",  
-                   "jugement", "publications", "retourcolis", "saisiebord",  +                   "jugement", "publications", "retourcolis"]
-                   "verifications", "vuetable"]+
  
 # options d'inclusion/exclusion des modules # options d'inclusion/exclusion des modules
-includes = ["sip"]+includes = ["sip", "atexit"]
 excludes = [] excludes = []
-packages = []+packages = ["biblio"
 + 
 +# copier les fichiers et/ou repertoires et leur contenu: 
 +includefiles = [("aide", "aide"), 
 +                ("fichiers", "fichiers"), 
 +                ("navigweb", "navigweb"), 
 +                ("simplediteur", "simplediteur"), 
 +                'adresse.ini',  
 +                "concoursphotos.png", 
 +                ("etiquettes/CODE39.TTF", "etiquettes/CODE39.TTF"), 
 +                ("qt_cx.conf", "qt.conf")]
  
-# copier les fichiers et/ou répertoires et leur contenu: 
-includefiles = [("aide", "aide")] 
 if sys.platform == "linux2": if sys.platform == "linux2":
-    includefiles += [(r"/usr/lib/qt4/plugins/sqldrivers","sqldrivers")]+    includefiles += [(r"/usr/lib/qt4/plugins","plugins")] 
 +    includefiles += [(r"/usr/share/qt4/translations","translations")]
 elif sys.platform == "win32": elif sys.platform == "win32":
-    includefiles += [(r"C:\Python27\Lib\site-packages\PyQt4\plugins\sqldrivers","sqldrivers")]+    includefiles += [(r"C:\Python27\Lib\site-packages\PyQt4\plugins","plugins")] 
 +    includefiles += [(r"C:\Python27\Lib\site-packages\PyQt4\translations","translations")]
 else: else:
     pass     pass
          
-inclusion éventuelles de bibliothèques supplémentaires+inclure les fichiers non-py et non-pyw dans library.zip 
 +zipincludes = [] 
 + 
 +# pour que les bibliotheques de /usr/lib soient copiees aussi sous Linux
 binpathincludes = [] binpathincludes = []
 if sys.platform == "linux2": if sys.platform == "linux2":
-    # pour que les bibliothèques de /usr/lib soient copiées aussi 
     binpathincludes += ["/usr/lib"]     binpathincludes += ["/usr/lib"]
    
Ligne 110: Ligne 130:
            "packages": packages,            "packages": packages,
            "include_files": includefiles,            "include_files": includefiles,
-           "bin_path_includes": binpathincludes+           "zip_includes": zipincludes, 
 +           "bin_path_includes": binpathincludes
 +           "create_shared_zip": True, 
 +           "include_in_shared_zip": True, 
 +           "compressed": False
            }            }
- + 
 +# pour inclure sous Windows les dll system necessaires 
 +if sys.platform == "win32": 
 +    options["include_msvcr"] = True 
 ############################################################################# #############################################################################
 # preparation des cibles # preparation des cibles
Ligne 118: Ligne 146:
 if sys.platform == "win32": if sys.platform == "win32":
     base = "Win32GUI"     base = "Win32GUI"
 +    #base = "Console"
 +
 +icone = None
 +if sys.platform == "win32":
 +    icone = "concoursphotos.ico"
    
 cible_1 = Executable( cible_1 = Executable(
-    script = "concoursphotos.pyw",+    script = "bordereaux.pyw",
     base = base,     base = base,
-    compress = True, +    compress = False, 
-    icon None,+    copyDependentFiles = True, 
 +    appendScriptToExe True, 
 +    appendScriptToLibrary = False, 
 +    icon = icone
     )     )
    
 +cible_2 = Executable(
 +    script = "jugement.pyw",
 +    base = base,
 +    compress = False,
 +    copyDependentFiles = True,
 +    appendScriptToExe = True,
 +    appendScriptToLibrary = False,
 +    icon = icone
 +    )
 +
 +cible_3 = Executable(
 +    script = "publications.pyw",
 +    base = base,
 +    compress = False,
 +    copyDependentFiles = True,
 +    appendScriptToExe = True,
 +    appendScriptToLibrary = False,
 +    icon = icone
 +    )
 +
 +cible_4 = Executable(
 +    script = "retourcolis.pyw",
 +    base = base,
 +    compress = False,
 +    copyDependentFiles = True,
 +    appendScriptToExe = True,
 +    appendScriptToLibrary = False,
 +    icon = icone
 +    )
 +
 +cible_5 = Executable(
 +    script = "etiquettes.pyw",
 +    base = base,
 +    compress = False,
 +    copyDependentFiles = True,
 +    appendScriptToExe = True,
 +    appendScriptToLibrary = False,
 +    icon = icone
 +    )
 +
 ############################################################################# #############################################################################
 # creation du setup # creation du setup
Ligne 131: Ligne 207:
     name = "concoursphotos",     name = "concoursphotos",
     version = "1",     version = "1",
-    description = "Traitement de concours photos sous Windows et Linux",+    description = "concoursphotos",
     author = "Tyrtamos",     author = "Tyrtamos",
     options = {"build_exe": options},     options = {"build_exe": options},
-    executables = [cible_1]+    executables = [cible_1, cible_2, cible_3, cible_4, cible_5]
     )     )
 </code> </code>
cx_freeze_pyqt4_windows.txt · Dernière modification: 2014/08/09 08:01 de tyrtamos