Outils pour utilisateurs

Outils du site


cx_freeze

Ceci est une ancienne révision du document !


Distribuer une application avec cx-freeze (multiplateforme)

Objectif

Python est de plus en plus utilisé sur nos machines (et c'est très bien!), mais en contrepartie, quand on diffuse un logiciel en Python, on ne devrait pas être soumis à l'existence d'un python installé, ou à sa version: il faut donc que le logiciel diffusé intègre son propre interpréteur Python ainsi que les modules et bibliothèques utilisés.

C'est l'objet de la présente page: on va utiliser cx_Freeze pour cela, qui a l'avantage d'être multiplateforme.

Site de référence: http://cx-freeze.sourceforge.net/

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).

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 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

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.

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). 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'.

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
# source d'inspiration: http://wiki.wxpython.org/cx_freeze
 
import sys, os
from cx_Freeze import setup, Executable
 
#############################################################################
# preparation des options 
path = sys.path.append(os.path.join("..", "..", "biblio"))
includes = ["printx", "bibconcours"]
excludes = []
packages = []
 
options = {"path": path,
           "includes": includes,
           "excludes": excludes,
           "packages": packages
           }
 
#############################################################################
# preparation des cibles
base = None
if sys.platform == "win32":
    base = "Win32GUI"
 
cible_1 = Executable(
    script = "test.py",
    base = base,
    compress = True,
    icon = None,
    )
 
cible_2 = Executable(
    script = "test2.py",
    base = base,
    compress = True,
    icon = None,
    )
 
#############################################################################
# creation du setup
setup(
    name = "test_cx_freeze",
    version = "0.1",
    description = "simple test de cx_freeze avec PyQt4",
    author = "Tyrtamos",
    options = {"build_exe": options},
    executables = [cible_1, cible_2]
    )

Ce setup.py doit se trouver dans le répertoire dans lequel il y a les fichiers .py à convertir.

On prend alors la console (cmd pour Windows), on se loge dans le répertoire en question, et on fait:

python setup.py build

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.

Le résultat se trouve dans le sous-répertoire build/exe.win32-2.6 (exemple pour Python 2.6 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-2.6'.

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

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.


Amusez-vous bien!

cx_freeze.1419415617.txt.gz · Dernière modification: 2014/12/24 11:06 de tyrtamos

Outils de la page