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 :

Deploiement windows possible?


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 : 41
    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 Deploiement windows possible?
    Bonjour,

    Je developpe sous Linux en Python 2.7. J'ai lu de nombreuses choses sur py2exe et cx_freeze. Je n'ai malheureusement pas trouvé réponse à mon probleme.

    Mon application est organisé ainsi:
    DOSSIER_PRINCIPAL
    >>SRC
    >>>>PY
    >>>>>>Module1
    >>>>>>Module2
    >>>>>>Module3
    >>>>>>Module4
    >>>>BDD
    >>>>>>BDD_SQLITE
    >>IMG
    >>>>BACKGROUND
    >>>>BUTTONS
    >>>>>>IMG1
    >>>>>>IMG2
    >>>>>>IMG3

    Module 1 fait import de pygtk, gtk, sys, os, Module 2 fait import de maths, Module 3 fait import de sqlite, sys, os et Module 4 fait import de Module1, Moduel2, Module3, sys, os.

    Le module1 récupère des images dans Buttons, et le module 3 accede à la BDD_SQLITE.

    Le logiciel fonctionne bien, mais vient l'épineuse question de la convertion en exe. J'ai trouvé nombre d'exemple d'un simple, voir de deux fichiers, mais jamais avec autant d'interconnection. Mes essais d'hier soir n'ont rien donné de concluants.

    Mon souhait serait de créer une application standalone en remplaçant les modulex.py par des modulesx.exe tout simplement. Est-ce faisable à votre avis?

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'utilise souvent cx_freeze sous Windows et sous Linux, y compris pour de gros programmes complexes avec bibliothèque graphique (j'utilise PyQt4), sqlite, ftp, web, etc...

    Ce que tu envisages est tout à fait faisable, mais bien sûr, pour faire un exe destiné à Windows, il faudra le faire sous Windows (les bibliothèques à emporter sont différentes)!

    Pour cx_freeze, j'utilise la méthode avec "setup.py", ce qui me permet d'utiliser un "modèle" que je modifie au fur et à mesure de mes expériences. Mon tuto pour Windows est ici: http://python.jpvweb.com/mesrecettes..._pyqt4_windows.

  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 : 41
    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
    Bonjour Tyrtamos,

    Merci beaucoup pour ton retour rapide.

    Je pensais pouvoir générer l'exe depuis Linux, mais non aparemment. On apprend tous les jours.

    Je viens de lire ton exemple. Je comprend bien comment faire avec mes multiples fichiers PY.

    Petite question: Les exe générés seront a placer dans mon dossier "00-PY" du coup? et tout fonctionnera bien?

    Essais ce soir si je remet la main sur la bonne VM. Merci beaucoup je te tiens au courant.


    EDIT: côté Linux, je créé des paquet .deb donc pas besoin de cx_freeze

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 517
    Points : 37 135
    Points
    37 135
    Par défaut
    Salut,
    Citation Envoyé par deusyss Voir le message
    Mon souhait serait de créer une application standalone en remplaçant les modulex.py par des modulesx.exe tout simplement. Est-ce faisable à votre avis?
    Hu?!
    En Python, un module est un objet auquel on appliquera /import/ pour pouvoir l'utiliser. Construire moduleX.exe a partir de moduleX.py est possible mais les .exe s’exécuteront dans leurs interpréteurs et des process distincts alors que les scripts ".py" devraient partager le même interpréteur.
    => les interactions entre ces /modules/ ne sont plus du tout les mêmes.

    Avec un engin de Virtualisation tel que VirtualBox, il est possible d’accéder au projet (les sources) en utilisant des /shared-folders/. Dit autrement, je peux modifier le source depuis une VM Linux et la mise a jour se propage dans la VM Windows.

    A partir de la, un outil de packaging tel que cx_freeze génère les fichiers de la distribution dans un sous-répertoire build.exe-linux-X.Y ou exe.win32-X.Y a partir de ce qui a été définit dans le setup.py. L’étape suivante sera d'emballer le /build/ en fonction de l'outil de déploiement: MSI, RPM,...
    note: in fine, c'est la structure du répertoire du /build.os_specific/ qu'on retrouvera sur la cible après /déploiement/

    J'y intègre plusieurs .exe (ou points d’entrée): le prog, des tests fonctionnels de base (qui appelleront prog.exe) et des tests d’intégration (s'il y a des dépendances externes).

    - W

  5. #5
    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 : 41
    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
    Bonjour,

    Je n'ai pas eu le temps de repasser sur mon déploiement windows depuis quelques temps, étant pas mal pris en ces mois d'été.

    J'ai cependant eu le temps d'y réfléchir, et en fait, que tout mes fichiers .py soient rassemblés en un seul exe ne me posent au final aucuns problèmes, c'est même plus pratiques.

    Je recommencerais mes essais dès que j'en aurai l'occasion et vous tiendrais au courant.

    Merci beaucoup pour votre aide en tattendant

  6. #6
    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 : 41
    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
    Bonjour à tous,

    Je reviens après quelques temps d'absence sur mon post, et un certains nombre d'essais.

    Suite à vos retours, je suis aprtis sur un seul exe final, mais avec le désir de garder ma structure.

    j'ai essayer ton lien tyrtamos, j'ai lu la documentation cx_freeze, qui manque un peu de clarté je trouve d'ailleurs, mais qui fait bien ressortir que ce peut etre un outil puissant.

    Bref, jusqu'ici rien avec cx_freeze.
    J'ai pourtant du mal à croire que personne n'a déjà fait ce que j'essaie de faire, que ce soit avec cx_freeze ou autre. Je continue à chercher.

    Si vous avez une idée, elle est la bienvenue. Je joint mon soft terminé si quelqu'un veut faire des essais.

    Merci
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai essayé avec ton programme, et je commence à trouver les problèmes que tu rencontres.

    1- sans instruction particulière dans le setup, seuls sont transférés les modules compilés .pyc (=> library.zip), ainsi que les bibliothèques "système" .dll. Mais rien d'autre: ni la base de données, ni la doc, ni les images..

    Pour retrouver tous ces éléments à exploiter par l'exe, il faut en demander la recopie dans le setup destiné à cx_freeze, grâce à l'instruction "includefiles".

    2- mais si on recopie ainsi, on va retrouver ces éléments recopiés à un autre endroit de l'arborescence, c'est à dire que les répertoires BDD, IMG et DOC seront au même niveau que les ModuleX.py. Et, là, on aura le 2ème problème: l'arborescence proposée ne pourra pas être la même dans la version .py et dans la version exe, ce qui posera des problèmes d'adressage pour accéder à ces éléments.

    Donc il faut, à mon avis, modifier l'arborescence du programme de la façon suivante:

    DOSSIER_PRINCIPAL

    >>Module1.py
    >>Module2.py
    >>Module3.py
    >>Module4.py
    >>septup.py

    >>BDD
    >>>>BDD_SQLITE

    >>IMG
    >>>>BACKGROUND
    >>>>BUTTONS
    >>>>>>IMG1
    >>>>>>IMG2
    >>>>>>IMG3

    >>DOC
    >>>>NOTICE
    >>>>DOC_SOURCE

    Avec ça, on pourra dans le setup demander la recopie des répertoires de données comme suit:

    includefiles = ["BDD", "IMG", "DOC"]

    Dans cette solution, vu des modules python, l'adresse relative pour accéder aux données sera la même dans la version py et dans la version exe, ce qui éliminera les problèmes de chemins.

    Si tu es d'accord, corrige tes codes pour coller avec la nouvelle arborescence, et redonne le zip que je continue à chercher.

  8. #8
    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 : 41
    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 aide.

    Je comprend mieux les problèmes que je rencontrais avec tes explications. Même si j'avoue que j'aurais préféré conservé la structure que j'avais créé, je comprend que je n'ai pas vraiment le choix pour m'autoriser un déploiement windows

    C'est en pratiquant qu'on apprend. Il me restera plus qu'a modifier toutes les structures de mes projets après; le principal étant d'avoir une solution.

    J'ai donc modifié la structure de mon projet, ainsi que le code pour les chemins d'accès aux divers fichiers. Le zip est en PJ.

    Je vais faire des essais dans le courant de la journée. J'accepte volontiers ton aide sur le sujet. Comme je l'ai dit précédemment, la doc me semble un peu nébuleuse.

    Merci beaucoup
    Fichiers attachés Fichiers attachés

  9. #9
    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 : 41
    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
    Petite information complémentaire: la doc ne m'apportant rien, j'ai fini par aller lire le code de cx_freeze. Il apparait que ce n'est en fait qu'une simple surcouche à distutils, donc la documentation complete est ici.

    Cette documentation est très complète, voir même trop pour quelqu'un qui désire juste créé un petit script. Mais au moins on y trouve nos réponses.

  10. #10
    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 : 41
    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
    Bonjour à tous,

    je reviens après plusieurs essais, réalisés sur plusieurs jour. Et je n'arrive pas à créer mon exécutable.

    Mon script étant peu être en cause, je le joint à mon message. L'un de vous aurait-il une piste?

    Merci d'avance. Je continue de mon côté
    Fichiers attachés Fichiers attachés

  11. #11
    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 : 41
    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
    J'avance un peu. En étant parti pour laisser tomber cx_freeze, pr passer à py2exe (qui au passage ne fonctionne pas non plus), j'ai compris beaucoup mieux le principe du script cx_freeze.

    J'ai réussit à créer un script fonctionnel, cependant, même si le .exe est généré sans erreur, c'est maintenant à l'execution que j'ai des problemes.

    En lançant le .exe généré en commande, j'ai le message "error: (<class 'sqlite3.OperationalError'>, OperationalError('unable to open database file',), <traceback object at 0x013691E8>)".

    Du coup, j'ai modifié mon module pilotant la BDD pour vérifier le chemin, et le chemin est partiellement correct mais pas tout à fait. En effet, j'ai C:\Documents and Settings\Logica\Bureau\PYCALCAR\PYCALCAR\build\exe.win32-2.7\library.zip/00-BDD/PYCALCAR.sqlite au lieu de C:\Documents and Settings\Logica\Bureau\PYCALCAR\PYCALCAR\build\exe.win32-2.7/00-BDD/PYCALCAR.sqlite. On voit qu'il y a un library.zip qui s'est invité.

    La nouvelle étape est donc de supprimer ce library.zip. Pour l'instant je n'arrive pas à faire mieux. Je joint mon script cx_freeze
    Fichiers attachés Fichiers attachés

  12. #12
    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 : 41
    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
    Je touche à la fin. Je post pour ceux que ça pourrait aider.

    D'après cette FAQ, quand on inclut des fichiers en sus, il faut modifier le chemin.

    Dans mon code, j'ai donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if sys.platform == 'linux2':
    			path = os.path.dirname(os.path.abspath(__file__))
    		elif sys.platform in ("win32", "cygwin"):
    			path = self.find_data_file()
    		else:
    			path = os.path.dirname(os.path.abspath(__file__))
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def find_data_file(self):
    		if getattr(sys, 'frozen', False):
    			path = os.path.dirname(sys.executable)
    		else:
    			path = os.path.dirname(os.path.abspath(__file__))
     
    		return path
    et dans mon script, je modifie les option
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    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,
               }
    A l'issue de ce recodage, le .exe fonctionne, et si on lance simplement les modules sous windows, via python, ça fonctionne également. Les scripts continuent également à fonctionner sous linux et (je suppose, je ne peut tester) mac.

    Je passe le sujet à résolu. Je vais tâcher d'écrire une petite doc pour résumer tout ce que j'ai fait, et viendrait la poster (si pas trop gros) sur ce post.

    Merci à tous pour votre aide
    Fichiers attachés Fichiers attachés

  13. #13
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bravo!

    Et tous mes encouragements pour la petite doc en question...

  14. #14
    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 : 41
    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 tyrtamos.

    En plus de la petite doc, j'ai commencé un petit soft: expymaker.

    Il sera en Open Source, je créérai un post pour quand il sera fini. En respectant une structure proche de celle que tu as proposé, il permettra d'automatiser la génération de l'exe, puis dans la foulée d'un setup, de manière transparente. Cela me simplifiera la vie à l'avenir, ainsi qu'a nombre de développeur je pense.

    Les bases sont sur papier, et je commence à le coder dès aujourd'hui. Le fonctionnement se rapprochera de debreate (si tu connais) qui sert à créer des paquets debian.

  15. #15
    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 : 41
    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
    Bonjour Tyrtamos,

    Le logiciel est à peu près fini, du moins la version 1.0.0 (j'ai deja prevu quelques ameliorations). Je compte le mettre en dispo sous peu sur mon site web.

    Le nom à changer en PYXMAKER pour PYthon eXecutable MAKER (ça sonnait mieux que expymaker).

    Le principe est resté celui évoqué plus tôt: on renseigne un certains nombre d'info (nom, version, auteur, mail auteur, mainteneur, mail mainteneur, description rapide, site/page web, dossier PJ standard, executable, execution en console ou mode fenetre) pour le projet et pour le setup (nom desire pour le setup, icone specifique potentielle, mot de passe potentiel), et simplement en cliquant sur un bouton, pyxmaker s'interface avec cx_freeze pour généré un exécutable, le zip, et dans la foulée s'interface avec Inno Setup pour créer un setup d'install.

    Côté setup, on peut également définir la licence, le texte à afficher avant et après installation.

    Côté fonctionnalité, on peut sauvegarder la configuration d'un logiciel, et choisir sa langue (de base français et anglais, géré dans une BDD SQLite).

    Si tout va bien, je créé un post dédié la semaine prochaine pour pyxmaker et un autre pour la notice cx_freeze. Je compte sur toi, et les autres membres du forum, pour tester et me remonter vos impressions

  16. #16
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bonjour deusyss,

    Bravo!

    Citation Envoyé par deusyss Voir le message
    Si tout va bien, je créé un post dédié la semaine prochaine pour pyxmaker et un autre pour la notice cx_freeze. Je compte sur toi, et les autres membres du forum, pour tester et me remonter vos impressions
    Tu peux!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Deploiement Windows XP
    Par Metafire18 dans le forum Windows XP
    Réponses: 1
    Dernier message: 03/07/2009, 13h25
  2. [Lex/Yacc] Comment installer sous Windows - Possible avec cygwin ?
    Par info_amel dans le forum Générateurs de compilateur
    Réponses: 0
    Dernier message: 10/12/2007, 23h36
  3. Réponses: 7
    Dernier message: 29/06/2007, 19h13
  4. Réponses: 3
    Dernier message: 23/03/2007, 17h23
  5. Réponses: 3
    Dernier message: 24/10/2005, 10h22

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