IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Déploiement/Installation Python Discussion :

Utilisation/Note sur CX_FREEZE pour WINDOWS


Sujet :

Déploiement/Installation Python

  1. #1
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut Utilisation/Note sur CX_FREEZE pour WINDOWS
    Ceci est l'ensemble de mes notes, rassemblées durant mes recherches pour reussir à faire fonctionner cx_freeze, avec du code PYTHON, pour windows, exclusivement.

    J'espère qu'elles pourront servir à un certains nombres de personnes en difficulté avec ce logiciel. J'invite tous les membres récupérant des informations non citées ici à venir compléter/corriger ce post.

    Les sites utiles sont:
    >CX_FREEZE: http://cx-freeze.sourceforge.net/
    >DISTUTILS: http://docs.python.org/2/library/distutils.html


    Introduction
    Cx_freeze est une surcouche à disutils, simplifiant un peu (beaucoup) l'utilisation de cet outil afin de créer des executables PYTHON

    On peut définir un certains nombres de paramètres permettant de personnaliser plus ou moins l'executable de sortie.

    Il est possible d'indiquer plusieurs fichier python en entrée en tant qu'exécutable, mais dans ce cas précis, cela génèrera plusieurs .exe. Chacun de ses .exe sera independant: il s'exécutera dans sa propre instance de l'interprêteur PYTHON.

    Pour ne pas rencontrer ce soucis, il faut définir un .py comme exécutable seul, lequel gèrera l'ensemble des autres .py et ressources.


    Meilleure structure PJ adaptée à cx_freeze
    La structure du projet m'a donné quelques difficultés. Après de nombreux essais, il est apparus que les fichiers python devaient se situés à la racine du dossier projet pour ne pas poser probleme. L'icone pour le logiciel, au format ico (imposer par cx_freeze) doit également se trouver à la racine, de même que les packages.

    Les fichiers en sus (images, musiques, videos, BDD, ...) peuvent eux se trouver à la racine, ou ranger dans des dossiers. Si nous resumons la structure de base donc:

    <Dossier PJ>
    --*.py
    --*.ico
    --packages
    --dossiers fichiers en sus ou fichiers eux même

    Cette structure sera celle considérée pour la suite.


    Chemin d'exécution
    Un des soucis que j'ai rencontré lors de mes essais, est le chemin d'exécution. En effet, j'utilisasis des commandes classique avec os et sys. Il s'avère que cela change un peu lorsque le code PYTHON est compilé pour windows, tel qu'indiqué dans la FAQ de CX_FREEZE. Pour y palier, j'ai créé un module que j'utilise dans tous mes projet, et qui me sert de chemin de base pour accéder aux ressources logicielles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/env python
    #-*- coding:utf-8 -*
     
    import os
    import sys
     
    #===================================================#
    #       Obtention du bon chemin d'execution         #
    #===================================================#
    def cxf_get_path():
    	"""
                    Allow to know the good path under Linux, MAC, and Windows.
                    Under Windows, adapt the path betwwen direct execution or 
                    trough cx_freeze or PYXMAKER
                            
                    PARAMETERS
                    ==========
                            None
                            
                    RETURNS
                    =======
                            The execution path, adapted to the situation
            """
    	#OS = Linux
    	if sys.platform == 'linux2':
    		path = os.path.dirname(os.path.abspath(__file__))
     
    	#OS = Windows
    	elif sys.platform in ("win32", "cygwin"):
    		if getattr(sys, 'frozen', False):
    			path = os.path.dirname(sys.executable)
    		else:
    			path = os.path.dirname(os.path.abspath(__file__))
     
    	#OS = MAC
    	else:
    		path = os.path.dirname(os.path.abspath(__file__))
     
    	return path

    Comme on peut le voir ici, ce code me permet de m'adapter à l'OS, et dans le cas de windows, de récupérer le chemin correct, que j'exécute directement le code PYTHON, ou que je le compile en exécutable. Ainsi je n'ai jamais à remodifier mon code, fonction de ce que je fais derrière.


    Paramètres
    La documentation de cx_freeze est assez restreintes, mais une fois que l'on sais que se cache derrière en réalité distutils, alors on peut trouver l'ensemble des informations désirées dans la documentation de ce dernier outil.

    Parmis les nombreux paramètres possibles, les principaux sont:
    >Pour le projet:
    >>includes: permet de préciser les modules à inclure, il s'agit d'une liste
    >>excludes: permet de préciser les modules à exclure. il s'agit d'une liste
    >>packages: permet de préciser les packages persos à inclures. C'est une liste
    >>include_files: permet de préciser les fichiers/dossier à inclures. C'est une liste. Fonctionne de manière récursive. Si un dossier est indiqué, tous les fichiers et sous-dossiers contenus seront inclus.
    >>base: si à None, indique que le code PYTHON s'exécute en mode console. Si à Win32GUI, indique un mode fenetre. Le mauvais paramètre peut entrainer des message d'erreur à l'exécution.

    >Pour l'exécutable:
    >>name: Nom du logiciel/package
    >>version: La version
    >>author: auteur(s) du logiciel/package
    >>author_email: mail de/des (l') auteur(s)
    >>maintainer: le nom du mainteneur
    >>maintainer_email: le mail du mainteneur
    >>url: la homepage du logiciel/package
    >>description: une description courte (une phrase, moins de 200 caractères)
    >>long_description: une description longue (au format reStructuredText)
    >>download_url: l'url de telechargement du package/logiciel
    >>license: la licence utilisée
    >>icon: l'icone qui servira pour le logiciel sous windows exlusivement. Remplace une icone definit dans l'IHM. Cette icone doit se trouver au même niveau que les fichiers python


    Script type
    Le script ci-dessous est type et vous permettra je l'espère, combiné aux explications ci-dessus, de vous en sortir. Il s'agit du script type que j'utilise dans mon logiciel PYXMAKER. A noter que $$ICON$$ et $$ICON_EXEC$$ contiennent la même information.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
     
    #script cx_freeze for pyxamker software
     
     
     
     
    import sys, os
    from cx_Freeze import setup, Executable
     
     
     
     
    #########################################################################
    #                         OPTIONS PREPARATION							#
    #########################################################################
    path = sys.path.append(os.path.join(".", os.path.dirname(sys.executable)))
    includes = [$$INCLUDES$$]
    excludes = [$$EXCLUDES$$]
    packages = [$$PACKAGES$$]
    include_files = [$$INCLUDE_FILES$$]
     
    options = {"path": path,
               "includes": includes,
               "excludes": excludes,
               "packages": packages,
               "include_files": include_files,
               "create_shared_zip": False,
               "append_script_to_exe": True,
               "include_in_shared_zip": False,
               "include_msvcr": True,
               }
     
     
     
     
    #########################################################################
    #                         TARGET PREPARATION							#
    #########################################################################
    base = None
    if sys.platform == "win32" and $$WINCONS$$:
        base = "Win32GUI"
     
    cible_1 = Executable(
        script = "$$FICHIER_PY_EXEC$$",
        base = base,
        icon = "$$ICON_EXEC$$",
        compress = False
        )
     
     
     
     
    #########################################################################
    #                          SETUP PREPARATION							#
    #########################################################################
    setup(
        name = "$$NAME$$",
        version = "$$VERSION$$",
        description = "$$DESCRIPTION$$",
        author = "$$AUTHOR$$",
        author_email = "$$AUTHOR_MAIL$$",
        maintainer = "$$MAINTAINER$$",
        maintainer_email = "$$MAINTAINER_MAIL$$",
        url = "$$WEBSITE$$",
        options = {"build_exe": options},
        icon = "$$ICON$$",
        executables = [cible_1]
        )
    Voir aussi les Cours et tutoriels pour apprendre la programmation Python
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 808
    Points : 7 086
    Points
    7 086
    Par défaut
    Salut,

    J'utilise pas cxFreeze, etc... Mais tout est clair !

    Permet moi de te conseiller de prévenir un modérateur pour que ton post reste sur première page du forum, voir le placer en tant que tutoriel sur le site.

    Bonne continuation...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Merci beaucoup pour ton conseil, bonne idée en effet.

    Bonne journée à toi
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

Discussions similaires

  1. Réponses: 22
    Dernier message: 16/03/2012, 15h13
  2. Réponses: 0
    Dernier message: 11/03/2010, 14h46
  3. Pb d'accès à distance sur Postgre pour windows
    Par Guitch dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 28/09/2004, 19h13
  4. Aide sur WinDbg pour Windows 98
    Par robert.michel9 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 16/08/2004, 22h08
  5. utilisation d'objets ADO pour CMS sur POSTGRESQL7.3.2
    Par turbok dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/10/2003, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo