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

Outils pour utilisateurs

Outils du site


cx_freeze

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

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
Révision précédente
cx_freeze [2014/12/24 11:06]
tyrtamos [Objectif]
cx_freeze [2014/12/24 12:21]
tyrtamos
Ligne 1: Ligne 1:
 ====== Distribuer une application avec cx-freeze (multiplateforme) ====== ====== Distribuer une application avec cx-freeze (multiplateforme) ======
 +
 +[modif 24/12/2014]
  
 ===== Objectif ===== ===== Objectif =====
Ligne 12: Ligne 14:
 ===== Installation de cx_Freeze ===== ===== Installation de cx_Freeze =====
  
-Comme on voit sur la page des téléchargements, cx_Freeze existe pour la partie binaire pour chaque version de Python (2.5, 2.6, 2.7, 3.1)+Comme on voit sur la page des téléchargements, cx_Freeze existe pour la partie binaire pour chaque version de Python. A ce jour (12/2014)il existe pour Python 2.7, 3.3 et 3.4
  
 Sous Windows, c'est facile: on télécharge sur le site de cx_Freeze et on installe la bonne version (celle qui correspond à la version du Python qu'on a!) comme n'importe quel logiciel Windows. Sous Windows, c'est facile: on télécharge sur le site de cx_Freeze et on installe la bonne version (celle qui correspond à la version du Python qu'on a!) comme n'importe quel logiciel Windows.
  
-Sous Linux, c'est un peu plus complexe. Il y a un paquet rpm pour centos, et les sources pour les autres. Cependant, il est très probable que cx_Freeze fasse déjà partie des logiciels disponibles pour votre distribution: prenez celle-là!+Sous Linux, c'est un peu plus complexe. Il y a un paquet rpm pour centos, et les sources (.tar.gz) pour les autres. Cependant, il est très probable que cx_Freeze fasse déjà partie des logiciels disponibles pour votre distribution: prenez celle-là!
  
 Sous Mac Os X, je ne sais pas, mais on en parle dans la mailing-list: [[http://sourceforge.net/mailarchive/forum.php?forum_name=cx-freeze-users]]   Sous Mac Os X, je ne sais pas, mais on en parle dans la mailing-list: [[http://sourceforge.net/mailarchive/forum.php?forum_name=cx-freeze-users]]  
Ligne 22: Ligne 24:
 ===== Code proposé ===== ===== Code proposé =====
  
-Après plusieurs essais et consultation des quelques tutos d'internet, j'utilise la méthode avec setup.py, et voilà son contenu type.+J'utilise depuis pas mal de temps déjà la méthode avec setup.py. En faitj'utilise toujours le même setup.py que j'améliore petit à petit au fur et à mesure de mes expériences
  
-Pour l'exemple, j'ai dans un répertoire 2 fichiers 'test.py' et 'test2.py' que je veux transformer en exécutable (.exe si c'est sous windows).  +Voilà mon setup.py vide:
-Ils utilisent tous les 2 les bibliothèques graphiques PyQt4.  +
-Ils importent 2 modules, 'printx' et 'bibconcours', qui sont dans un répertoire relatif '../../biblio'.+
  
 <code python> <code python>
 #!/usr/bin/python #!/usr/bin/python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 +# Python 3
  
-# source d'inspirationhttp://wiki.wxpython.org/cx_freeze+""" 
 +Icone sous Windowsil faut: 
 +=> un xxx.ico pour integration dans le exe, avec "icon=xxx.ico" 
 +=> un xxx.png pour integration avec PyQt4 + demander la recopie avec includefiles. 
 +"""
  
 import sys, os import sys, os
Ligne 38: Ligne 43:
  
 ############################################################################# #############################################################################
-# preparation des options  +# preparation des options 
-path = sys.path.append(os.path.join("..", "..", "biblio")) + 
-includes = ["printx", "bibconcours"]+# chemins de recherche des modules 
 +# ajouter d'autres chemins (absolus) si necessaire: sys.path + ["chemin1", "chemin2"
 +path = sys.path 
 + 
 +# options d'inclusion/exclusion des modules 
 +includes = []  # nommer les modules non trouves par cx_freeze
 excludes = [] excludes = []
-packages = []+packages = []  # nommer les packages utilises 
 + 
 +# copier les fichiers non-Python et/ou repertoires et leur contenu: 
 +includefiles = [] 
 + 
 +if sys.platform == "win32": 
 +    pass 
 +    # includefiles += [...] : ajouter les recopies specifiques à Windows 
 +elif sys.platform == "linux2": 
 +    pass 
 +    # includefiles += [...] : ajouter les recopies specifiques à Linux 
 +else: 
 +    pass 
 +    # includefiles += [...] : cas du Mac OSX non traite ici 
 + 
 +# pour que les bibliotheques binaires de /usr/lib soient recopiees aussi sous Linux 
 +binpathincludes = [] 
 +if sys.platform == "linux2": 
 +    binpathincludes += ["/usr/lib"
 + 
 +# niveau d'optimisation pour la compilation en bytecodes 
 +optimize = 0 
 + 
 +# si True, n'affiche que les warning et les erreurs pendant le traitement cx_freeze 
 +silent = True
  
 +# construction du dictionnaire des options
 options = {"path": path, options = {"path": path,
            "includes": includes,            "includes": includes,
            "excludes": excludes,            "excludes": excludes,
-           "packages": packages+           "packages": packages
 +           "include_files": includefiles, 
 +           "bin_path_includes": binpathincludes, 
 +           "create_shared_zip": False,  # <= ne pas generer de fichier zip 
 +           "include_in_shared_zip": False,  # <= ne pas generer de fichier zip 
 +           "compressed": False,  # <= ne pas generer de fichier zip 
 +           "optimize": optimize, 
 +           "silent": silent
            }            }
 +
 +# pour inclure sous Windows les dll system de Windows necessaires
 +if sys.platform == "win32":
 +    options["include_msvcr"] = True
  
 ############################################################################# #############################################################################
Ligne 54: Ligne 100:
 base = None base = None
 if sys.platform == "win32": if sys.platform == "win32":
-    base = "Win32GUI"+    base = "Win32GUI # pour application graphique sous Windows 
 +    # base = "Console" # pour application en console sous Windows 
 + 
 +icone = None 
 +if sys.platform == "win32": 
 +    icone = "icone.ico"
  
 cible_1 = Executable( cible_1 = Executable(
-    script = "test.py", +    script="monprogramme1.pyw", 
-    base = base, +    base=base, 
-    compress = True, +    compress=False,  # <= ne pas generer de fichier zip 
-    icon None,+    copyDependentFiles=True, 
 +    appendScriptToExe=True, 
 +    appendScriptToLibrary=False,  # <= ne pas generer de fichier zip 
 +    icon=icone
     )     )
  
 cible_2 = Executable( cible_2 = Executable(
-    script = "test2.py", +    script="monprogramme2.pyw", 
-    base = base, +    base=base, 
-    compress = True, +    compress=False, 
-    icon None,+    copyDependentFiles=True, 
 +    appendScriptToExe=True, 
 +    appendScriptToLibrary=False, 
 +    icon=icone
     )     )
  
Ligne 73: Ligne 130:
 # creation du setup # creation du setup
 setup( setup(
-    name = "test_cx_freeze", +    name="monprogramme", 
-    version = "0.1", +    version="1.00", 
-    description = "simple test de cx_freeze avec PyQt4", +    description="monprogramme", 
-    author = "Tyrtamos", +    author="auteurduprogramme", 
-    options = {"build_exe": options}, +    options={"build_exe": options}, 
-    executables = [cible_1, cible_2]+    executables=[cible_1, cible_2]
     )     )
 </code> </code>
  
-Ce setup.py doit se trouver dans le répertoire dans lequel il y a les fichiers .py à convertir.+Utilisation:
  
-On prend alors la console (cmd pour Windows), on se loge dans le répertoire en question, et on fait:+A titre d'exemple: dans un répertoire, j'ai un développement comportant 2 programmes .py à lancer en exe: monprogramme1.py et monprogramme2.py. Il peut y avoir dans ce répertoire des modules personnels utilisés par ces 2 fichiers .py. 
 + 
 +On place le setup.py dans ce répertoire, et on le configure en fonction du programme. 
 + 
 +On prend alors la console (cmd pour Windows), on se loge dans le répertoire en question (avec "cd chemin"), et on fait:
  
 <code> <code>
Ligne 90: Ligne 151:
 </code> </code>
  
-Il y a alors plusieurs pages d'exécution. En cas d'erreur, il faut utiliser les options pour corriger, et inclure ou exclure les éléments concernés.+Il vient alors des lignes qui indiquent le déroulement du traitement par cx_freeze. On lit soigneusement pour voir s'il y a des erreurs. En cas d'erreur, il faut corriger le setup.py et/ou corriger directement les programmes. 
 + 
 +Sous Windows, le résultat se trouve dans le sous-répertoire build/exe.win32-3.4 (exemple pour Python 3.4)qui contient les 2 exécutables voulus "monprogramme1.exe" et "monprogramme2.exe" accompagnés de toutes les bibliothèques nécessaires, y compris bien entendu de l'interpréteur Python
  
-Le résultat se trouve dans le sous-répertoire build/exe.win32-2.6 (exemple pour Python 2.sous Windows), qui contient les 2 exécutables voulus, et toutes les bibliothèques nécessaires, y compris bien entendu l'interpréteur Python+Le répertoire à diffuser est donc dans cet exemple: 'exe.win32-3.4'On peut le renommer en "monprogramme" ou en n'importe quoi d'autre. On peut aussi le diffuser sous forme d'archive zip.
  
-Le répertoire à diffuser est donc dans cet exemple: 'exe.win32-2.6'.+Il est bien sûr possible d'utiliser en plus un "installeur" qui permettra à un utilisateur d'installer ce programme comme n'importe quel autre. Il y a des possibilités sous cx_freeze de faire cela, mais en ce qui me concerne, j'utilise plutôt "inno Setup" sous Windows ([[http://www.jrsoftware.org/isinfo.php]]). Sous Linux, on peut créer des paquets (rpm, ...) mais je n'ai jamais essayé
  
-On peut, bien entendu traiter des cas plus complexes en utilisant toutes les nombreuses options possibles: voir [[http://cx-freeze.sourceforge.net/cx_Freeze.html]]+On peut, bien entendu traiter des cas plus complexes en utilisant toutes les nombreuses options possibles: voir [[http://cx-freeze.readthedocs.org/en/latest/index.html]].
  
-D'après ce que j'ai pu tester, le setup.py est identique sous Windows et sous Linux. Mais l'exécutable Windows doit être construit sous Windows, et l'exécutable Linux sous Linux, à cause des bibliothèques à intégrer qui sont différentes.+J'essaie de ne gérer qu'un seul setup.py pour Windows et Linux, quitte à mettre les particularités sous les tests "if sys.platform==...Mais l'exécutable Windows doit être construit sous Windows, et l'exécutable Linux sous Linux, à cause des bibliothèques à intégrer qui sont différentes.
  
 \\ \\
cx_freeze.txt · Dernière modification: 2014/12/24 12:21 de tyrtamos