Ci-dessous, les différences entre deux révisions de la page.
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] (Version actuelle) 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, | + | Comme on voit sur la page des téléchargements, |
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' | 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' | ||
- | 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: | + | Sous Linux, c'est un peu plus complexe. Il y a un paquet rpm pour centos, et les sources |
Sous Mac Os X, je ne sais pas, mais on en parle dans la mailing-list: | Sous Mac Os X, je ne sais pas, mais on en parle dans la mailing-list: | ||
Ligne 22: | Ligne 24: | ||
===== Code proposé ===== | ===== Code proposé ===== | ||
- | Après plusieurs essais et consultation des quelques tutos d' | + | J' |
- | Pour l' | + | Voilà mon setup.py vide: |
- | Ils utilisent tous les 2 les bibliothèques graphiques PyQt4. | + | |
- | Ils importent 2 modules, ' | + | |
<code python> | <code python> | ||
# | # | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
+ | # Python 3 | ||
- | # source d' | + | """ |
+ | Icone sous Windows: il faut: | ||
+ | => un xxx.ico pour integration dans le exe, avec " | ||
+ | => 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("..", "..", " | + | |
- | includes = [" | + | # chemins de recherche des modules |
+ | # ajouter d' | ||
+ | path = sys.path | ||
+ | |||
+ | # options d' | ||
+ | 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 == " | ||
+ | pass | ||
+ | # includefiles += [...] : ajouter les recopies specifiques à Windows | ||
+ | elif sys.platform == " | ||
+ | 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 == " | ||
+ | binpathincludes += ["/ | ||
+ | |||
+ | # niveau d' | ||
+ | optimize = 0 | ||
+ | |||
+ | # si True, n' | ||
+ | silent = True | ||
+ | # construction du dictionnaire des options | ||
options = {" | options = {" | ||
" | " | ||
" | " | ||
- | " | + | " |
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
} | } | ||
+ | |||
+ | # pour inclure sous Windows les dll system de Windows necessaires | ||
+ | if sys.platform == " | ||
+ | options[" | ||
############################################################################# | ############################################################################# | ||
Ligne 54: | Ligne 100: | ||
base = None | base = None | ||
if sys.platform == " | if sys.platform == " | ||
- | base = " | + | base = " |
+ | # base = " | ||
+ | |||
+ | icone = None | ||
+ | if sys.platform == " | ||
+ | icone = " | ||
cible_1 = Executable( | cible_1 = Executable( | ||
- | script = "test.py", | + | script=" |
- | base = base, | + | base=base, |
- | compress = True, | + | compress=False, |
- | | + | copyDependentFiles=True, |
+ | | ||
+ | appendScriptToLibrary=False, | ||
+ | icon=icone | ||
) | ) | ||
cible_2 = Executable( | cible_2 = Executable( | ||
- | script = "test2.py", | + | script=" |
- | base = base, | + | base=base, |
- | compress = True, | + | compress=False, |
- | | + | copyDependentFiles=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=" |
- | description = "simple test de cx_freeze avec PyQt4", | + | description=" |
- | author = "Tyrtamos", | + | author=" |
- | options = {" | + | options={" |
- | executables = [cible_1, cible_2] | + | executables=[cible_1, |
) | ) | ||
</ | </ | ||
- | 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' |
+ | |||
+ | On place le setup.py dans ce répertoire, | ||
+ | |||
+ | On prend alors la console (cmd pour Windows), on se loge dans le répertoire en question | ||
< | < | ||
Ligne 90: | Ligne 151: | ||
</ | </ | ||
- | Il y a alors plusieurs pages d'exécution. En cas d' | + | 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' |
+ | |||
+ | Sous Windows, le résultat se trouve dans le sous-répertoire build/ | ||
- | Le résultat se trouve dans le sous-répertoire | + | Le répertoire |
- | Le répertoire à diffuser | + | Il est bien sûr possible d'utiliser en plus un " |
- | On peut, bien entendu traiter des cas plus complexes en utilisant toutes les nombreuses options possibles: voir [[http:// | + | On peut, bien entendu traiter des cas plus complexes en utilisant toutes les nombreuses options possibles: voir [[http:// |
- | D'après ce que j'ai pu tester, le setup.py | + | J'essaie de ne gérer qu'un seul setup.py |
\\ | \\ |