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 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, | * Si votre programme comporte des modules à intégrer, placés dans des sous-répertoires, | ||
- | * il faut dire que la bibliothèque sip.pyd soit intégrée avec l' | + | * Pour PyQt4, |
* les fichiers et répertoires à copier en plus (ex: les fichiers d' | * les fichiers et répertoires à copier en plus (ex: les fichiers d' | ||
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 " | Et c'est tout: avec ça, vous récupérez un répertoire avec tout ce qu'il faut pour une exécution " | ||
- | Voilà un exemple de code du setup.py que j'ai utilisé pour un logiciel de concours photos pour un photo-club (environ | + | Voilà un exemple de code du setup.py que j'ai utilisé pour un logiciel de concours photos pour un photo-club (environ |
- | Pour que le setup.py puisse, sans modification, | + | Pour que le setup.py puisse, sans modification, |
\\ | \\ | ||
Ligne 71: | Ligne 72: | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
# Python 2.7 | # Python 2.7 | ||
- | # 02/2011 | + | # 03/2013 |
+ | |||
+ | """ | ||
+ | Pas d' | ||
+ | |||
+ | Icone sous Windows: il faut: | ||
+ | => un xxx.ico pour integration dans le exe, avec " | ||
+ | => 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", |
- | " | + | " |
- | " | + | |
# options d' | # options d' | ||
- | includes = [" | + | includes = ["sip", " |
excludes = [] | excludes = [] | ||
- | packages = [] | + | packages = [" |
+ | |||
+ | # copier les fichiers et/ou repertoires et leur contenu: | ||
+ | includefiles = [(" | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | ' | ||
+ | " | ||
+ | (" | ||
+ | (" | ||
- | # copier les fichiers et/ou répertoires et leur contenu: | ||
- | includefiles = [(" | ||
if sys.platform == " | if sys.platform == " | ||
- | includefiles += [(r"/ | + | includefiles += [(r"/ |
+ | includefiles += [(r"/ | ||
elif sys.platform == " | elif sys.platform == " | ||
- | includefiles += [(r" | + | includefiles += [(r" |
+ | includefiles += [(r" | ||
else: | else: | ||
pass | pass | ||
| | ||
- | # inclusion éventuelles | + | # inclure les fichiers non-py et non-pyw dans library.zip |
+ | zipincludes = [] | ||
+ | |||
+ | # pour que les bibliotheques | ||
binpathincludes = [] | binpathincludes = [] | ||
if sys.platform == " | if sys.platform == " | ||
- | # pour que les bibliothèques de /usr/lib soient copiées aussi | ||
binpathincludes += ["/ | binpathincludes += ["/ | ||
Ligne 110: | Ligne 130: | ||
" | " | ||
" | " | ||
- | " | + | " |
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
} | } | ||
- | + | ||
+ | # pour inclure sous Windows les dll system necessaires | ||
+ | if sys.platform == " | ||
+ | options[" | ||
############################################################################# | ############################################################################# | ||
# preparation des cibles | # preparation des cibles | ||
Ligne 118: | Ligne 146: | ||
if sys.platform == " | if sys.platform == " | ||
base = " | base = " | ||
+ | #base = " | ||
+ | |||
+ | icone = None | ||
+ | if sys.platform == " | ||
+ | icone = " | ||
cible_1 = Executable( | cible_1 = Executable( | ||
- | script = "concoursphotos.pyw", | + | script = "bordereaux.pyw", |
base = base, | base = base, | ||
- | compress = True, | + | compress |
- | | + | copyDependentFiles |
+ | | ||
+ | appendScriptToLibrary = False, | ||
+ | icon = icone | ||
) | ) | ||
+ | cible_2 = Executable( | ||
+ | script = " | ||
+ | base = base, | ||
+ | compress = False, | ||
+ | copyDependentFiles = True, | ||
+ | appendScriptToExe = True, | ||
+ | appendScriptToLibrary = False, | ||
+ | icon = icone | ||
+ | ) | ||
+ | |||
+ | cible_3 = Executable( | ||
+ | script = " | ||
+ | base = base, | ||
+ | compress = False, | ||
+ | copyDependentFiles = True, | ||
+ | appendScriptToExe = True, | ||
+ | appendScriptToLibrary = False, | ||
+ | icon = icone | ||
+ | ) | ||
+ | |||
+ | cible_4 = Executable( | ||
+ | script = " | ||
+ | base = base, | ||
+ | compress = False, | ||
+ | copyDependentFiles = True, | ||
+ | appendScriptToExe = True, | ||
+ | appendScriptToLibrary = False, | ||
+ | icon = icone | ||
+ | ) | ||
+ | |||
+ | cible_5 = Executable( | ||
+ | script = " | ||
+ | base = base, | ||
+ | compress = False, | ||
+ | copyDependentFiles = True, | ||
+ | appendScriptToExe = True, | ||
+ | appendScriptToLibrary = False, | ||
+ | icon = icone | ||
+ | ) | ||
+ | |||
############################################################################# | ############################################################################# | ||
# creation du setup | # creation du setup | ||
Ligne 131: | Ligne 207: | ||
name = " | name = " | ||
version = " | version = " | ||
- | description = "Traitement de concours photos sous Windows et Linux", | + | description = "concoursphotos", |
author = " | author = " | ||
options = {" | options = {" | ||
- | executables = [cible_1] | + | executables = [cible_1, cible_2, cible_3, cible_4, cible_5] |
) | ) | ||
</ | </ |