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

Python Discussion :

pyinstaller ou cxfreeze pur utiliser numpy/scipy/matplotlib ?


Sujet :

Python

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut pyinstaller ou cxfreeze pur utiliser numpy/scipy/matplotlib ?
    Bonsoir tous,

    j'aimerais faire des executables (ou "standalone") de certains bouts de code qui utilisent les bibliothèques numpy, scipy ou/et matplotlib et je galère grave, pourriez vous me dire ce que vous utilisez pour ce type d'application ? je suis sous windows mais j'aimerais faire la même chose sous linux par la suite. Comme py2exe ne fonctionne que sous W je ne souhaite pas l'utiliser.

    - pyinstaller à l'air assez facile à utiliser et fonctionne lorsque j'utilise des programmes simples. Mais lorsque j'utilise des programmes plus complexes ça ne fonctionne plus: pyinstaller ne reconnais aucune des librairies que je souhaite utiliser... comment lui les faire reconnaitre pour que mon executable fonctionne ? pourriez vous me montrer sur un cas concret simple ?

    - cxfreeze je ne suis jamais arrivé à l'utiliser car lorsque je l'installe j'ai trois fichiers "cxfreeze", "cxfreeze-postinstall", "cxfreeze-quickstart" dans mon répertoire C:\python27\Scripts mais je n'arrive à en lancer aucun car ils ne sont pas executables.

    ==> pourriez vous me dire lequel de ces deux programme utilisez vous pour ce genre d'application ? et comment le faire fonctionner afin d'avoir numpy/scipy et matplotlib dispo ?

    je vous remercie grandement pour votre aide

    bonne soirée

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'utilise couramment cx_freeze sous Windows et quelquefois sous Linux avec des programmes complexes (graphiques, base de données, codes-barres, ftp, web, email, etc...) et quelquefois gros (env. 30.000 lignes), mais je n'utilise pas les modules scientifiques comme numpy, scipy ou matlab. Aussi, je ne sais pas si ces modules posent des problèmes particuliers à cx_freeze.

    Pour le traitement cx_freeze, j'utilise la méthode avec setup.py, que j'améliore progressivement en fonction de mon expérience.

    J'ai mis à jour mon tuto ce matin, et tu trouveras un setup.py vide à configurer avec quelques commentaires: http://python.jpvweb.com/mesrecettes...p?id=cx_freeze. Cela n'annule pas la nécessité de consulter la documentation: http://cx-freeze.readthedocs.org/en/latest/index.html, et dans les cas "désespérés" la mailing-liste: http://sourceforge.net/p/cx-freeze/m...-freeze-users/.

    Il y a en particulier un problème fréquent lorsque les programmes après traitement par cx_freeze doivent accéder à des fichiers de données (texte, images, etc...), car cx_freeze ne recopie que les fichiers Python et ses modules! Il faut donc faire recopier ces fichiers de données par cx_freeze (option "include_files"), mais aussi renseigner les programmes sur la nouvelle adresse de ces fichiers de données: ce n'est pas toujours simple à faire. Mais une fois qu'on a compris le principe, on trouve les solutions.

    Je te suggère de commencer par un script très simple (du genre print("coucou") pour te faire la main et vérifier que cx_freeze est correctement installé. Fabrique ensuite des petits scripts avec progressivement numpy, scipy et matlab. Regarde attentivement la liste des lignes fournies par cx_freeze et traite les erreurs une par une. Et tu peux toujours appeler au secours ici.

    S'il s'agit de distribuer des logiciels, on peut aussi et en plus utiliser un "installeur" comme "inno Setup" pour Windows (http://www.jrsoftware.org/isinfo.php). Ainsi, les utilisateurs pourront installer ton logiciel comme n'importe quel autre, et à l'utilisation, il ne sauront même pas que c'est du Python...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    salut!

    tout d'abord merci beaucoup pour ta réponse

    Entre temps j'ai passé pas mal de temps et j'ai enfin compris comment faire fonctionner cx_freeze ce n'était pas bien difficile mais je galérais sur des petits détails de m....

    Maintenant je vais essayer de passer aux choses sérieuses, c'est à dire comprendre ce que c'est ce setup.py que j'utilise actuellement bêtement

    Avec la version actuelle de mon setup tout est OK pour un programme simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from cx_Freeze import setup, Executable
    setup(
        name = "salut",
        version = "0.1",
        description = "Ce programme vous dit bonjour",
        executables = [Executable("hello.py")],
    )
    par contre j'ai essayé de lancer avec ton setup et j'ai des petits problèmes qui apparaissent avec les icones, j'ai donc fait un modif mineure et supprimé la second cible qui est je pense redondante (?), voici le nouveau setup que j'utilise sur base de ton modèle :
    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
    72
    73
    74
    75
    76
    77
    78
    79
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    #Icone sous Windows: il faut:
    #=> un xxx.ico pour integration dans le exe, avec "icon=xxx.ico"
    #=> un xxx.png pour integration avec PyQt4 + demander la recopie avec includefiles.
    import sys, os
    from cx_Freeze import setup, Executable
    #############################################################################
    # preparation des options
    # chemins de recherche des modules
    # ajouter d'autres chemins (absolus) si necessaire: sys.path + ["chemin1", "chemin2"]
    path = sys.path
    # options d'inclusion/exclusion des modules
    includes = []  # nommer les modules non trouves par cx_freeze
    excludes = []
    packages = []  # nommer les packages utilises
    # copier les fichiers non-Python et/ou repertoires et leur contenu:
    includefiles = []
    if sys.platform == "win32":
        pass
        # includefiles += [...] : ajouter les recopies specifiques à Windows
    elif sys.platform == "linux2":
        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 == "linux2":
        binpathincludes += ["/usr/lib"]
    # niveau d'optimisation pour la compilation en bytecodes
    optimize = 0
    # si True, n'affiche que les warning et les erreurs pendant le traitement cx_freeze
    silent = True
    # construction du dictionnaire des options
    options = {"path": path,
               "includes": includes,
               "excludes": excludes,
               "packages": packages,
               "include_files": includefiles,
               "bin_path_includes": binpathincludes,
               "create_shared_zip": False,  # <= ne pas generer de fichier zip
               "include_in_shared_zip": False,  # <= ne pas generer de fichier zip
               "compressed": False,  # <= ne pas generer de fichier zip
               "optimize": optimize,
               "silent": silent
               }
    # pour inclure sous Windows les dll system de Windows necessaires
    if sys.platform == "win32":
        options["include_msvcr"] = True
    #############################################################################
    # preparation des cibles
    base = None
    if sys.platform == "win32":
        #base = "Win32GUI"  # pour application graphique sous Windows
        base = "Console" # pour application en console sous Windows
    icone = None
    if sys.platform == "win32":
        icone = "icone.ico"
    cible_1 = Executable(
        script="hello.py",
        base=base,
        compress=False,  # <= ne pas generer de fichier zip
        copyDependentFiles=True,
        appendScriptToExe=True,
        appendScriptToLibrary=False,  # <= ne pas generer de fichier zip
        #icon=icone
        )
    #############################################################################
    # creation du setup
    setup(
        name="monprogramme",
        version="1.00",
        description="monprogramme",
        author="auteurduprogramme",
        options={"build_exe": options},
    	executables=[cible_1]
        )
    avec ce bout de code je n'ai pas de problèmes tout fonctionne. je vais essayer d'itérer en ajoutant petit à petit des librairies

    Maintenant les problèmes arrivent lorsque j'essai d'utiliser numpy avec par exemple ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import time
    import numpy as np
    print "salut"
    print "sqrt(9)=",np.sqrt(9)
    time.sleep(3)
    ce que j'ai fais c'est garder le setup ci dessus qui fonctionnait bien mais remplacer une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    packages = ["numpy"]  # nommer les packages utilises
    mais lorsque je lance cxfreeze alors j'ai le message d'erreur :
    où dois être installé numpy pour être reconnu par cxfreeze ? et es ce que j'ai bien appelé la librairie dans le setup.py ?

    merci de votre aide

    EDIT: je vous tiens informé au fur et à mesure de mon avancement

    j'ai réussi à faire fonctionner numpy, j'ai opté pour une nouvelle installation de numpy, j'ai utiliser pour l'installation l'executable fournit par ce gentil garçon qui permet d'avoir numpy reconnu directement par mon installation de base "python" :
    http://www.lfd.uci.edu/~gohlke/pythonlibs/

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    ça devient un peu le bordel donc je clos cette discussion qui déborde du cadre de départ. j'ai résolu pas mal de problèmes de bases.

    Maintenant j'ai fais une discussion spécifique à "cxfreeze"
    http://www.developpez.net/forums/d14...p/#post8077718

    merci pour votre aide et à bientôt

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

Discussions similaires

  1. Graphique avec scipy ? matplotlib ?
    Par Isabella83 dans le forum Calcul scientifique
    Réponses: 23
    Dernier message: 19/04/2013, 10h20
  2. [Numpy/SciPy]Correlation de données depuis deux fichiers csv
    Par progfou dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 13/03/2012, 12h34
  3. Réponses: 0
    Dernier message: 26/07/2011, 14h20
  4. Matrices conditionnelles avec numpy/scipy
    Par senacle dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 30/11/2008, 20h28
  5. Liaison Série & utilisation de Matplotlib
    Par perchman dans le forum Général Python
    Réponses: 3
    Dernier message: 01/02/2007, 15h12

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