Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer un executable - Comment inclure les assets

inclure les images/sons dans le .exe

    13 janvier 2023 à 23:06:53

    Bonjour à tous,

    J'ai développé un jeu en python, avec pygame (entre autres). Et le jeu utilise une cinquantaine d'images, sons, musiques... Je souhaite diffuser mon jeu gratuitement à plusieurs personnes (associations) alors j'ai cherché à créer un exécutable.

    J'ai suivi plusieurs tutos (youtube, forums) pour créer l'exe, j'ai notamment utilisé auto-py-to-exe, pyinstaller et cx_freeze. J'ai réussi à chaque fois à créer un exe qui contient tous mes codes et dépendances (packages, libraires...etc). Cependant, à chaque fois que je double clique sur l'exe, il me renvoie une erreur du type (exemple sur un son de pas) : No file 'Sound/Foostep.mp3' found in working directory"

    A partir du moment où je copie mon dossier d'assets à côté de l'exe tout fonctionne parfaitement. Le souci est donc que je rends facilement accessible mes images, sons, modèles animés, musiques, et même les fichiers des maps du jeu (format tmx, Tiled) car je vais devoir les envoyer avec l'exe aux utilisateurs. 

    Voici donc la question résultante : Est-il possible en python pour créer un executable en un fichier, standalone, qui contient déjà les assets en son sein ? Afin de pouvoir envoyer ce simple exe et de rendre modifiable tous les fichiers des maps (.tmx) ou autres images. 

    J'imagine qu'il y a bien des gens qui créent et diffusent des petits jeux en python sur le net, et les fichiers data sont compris dans l'exe ? 

    Merci beaucoup, en vous souhaitant une bonne journée 

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2023 à 10:44:29

      cx_freeze et pyinstaller ont leurs méthodes pour inclure des fichiers de données (voir la documentation de celui que vous préférez) et vous ne pourrez pas gérer les fichiers modifiables comme les autres.

      Pour autant, vous ne créez pas un exécutable mais un "package" (une sorte de fichier ZIP) qui va contenir Python, les bibliothèques utilisés, les données,... qui devra être "installé" (deZIPé) pour être utilisable. Et faire cette opération peut être faite à chaque lancement (des fichiers temporaires) ne change rien: ce n'est pas un exécutable mais un "package".

      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2023 à 22:13:47

        Merci de votre retour. Si je comprends bien, ce fichier zip est généré par pyinstaller et cx_freeze (je vais voir la doc) mais une fois dézippé, il laisse les données (assets, musiques,sons) toujours librement accessibles ? 

        N'existe t'il pas sous python un moyen de faire un executable qui inclus directement les assets ou autres fichiers png, mp3, tmx, tsx..etc masqués en son sein, comme cryptés si je puis dire, pour les rendre non copiables ou modifiables par des utilisateurs de l'application ? 

        En fouillant la doc de Pyinstaller, j'ai trouvé ceci

        "When you bundle to a single executable (seeBundling to One File), copies of added files are compressed into the executable, and expanded to the_MEIxxxxxxtemporary folder before execution."

        J'ai trouvé ceci qui correspond à ce que vous m'expliquez, cependant il laisse entendre que les fichiers de données sont compressées directement dans l'executable ? Est ce que cela correspond à la ce que je décris ? Quelqu'un a t'il déjà testé ?

        Merci :) 

        -
        Edité par Motherbrain31 15 janvier 2023 à 23:16:53

        • Partager sur Facebook
        • Partager sur Twitter
          16 janvier 2023 à 0:20:39

          Motherbrain31 a écrit:

          J'ai trouvé ceci qui correspond à ce que vous m'expliquez, cependant il laisse entendre que les fichiers de données sont compressées directement dans l'executable ?

          çà dit aussi: and expanded to the_MEIxxxxxx temporary folder before execution.

          Et si votre  objectif est de les protéger contre la copie, on y aura accès direct pendant l'exécution du programme (dans le répertoire temporaire)...

          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2023 à 20:22:55

            Daccord, effectivement j'avais sauté l'info la plus importante ;)

            J'ai tout de même décidé d'essayer ainsi, au moins pour voir, cependant, je rencontre des erreurs, pourriez vous m'éclairer svp ? 

            j'ai tout dabord commencé par faire cette ligne : pyinstaller monjeu.py --onefile --noconsole 

            En faisant ainsi, je génère mon exécutable (qui nécessite toujours que je lui copie les assets, comme vu précédemment). Mais ce que je cherche, c'est à créer monjeu.spec (le fichier des spécifications pour la création de l'exécutable). 

            Je suis ensuite exactement les informations données sur la doc de pyinstaller : https://pyinstaller.org/en/stable/spec-files.html#adding-files-to-the-bundle , section : Adding Data files

            Je modifie ma spec comme suit (par exemple ici je veux ajouter l'intégralité du contenu de mon dossier Sound): 

            a = Analysis(
                ['main.py'],
                pathex=[],
                binaries=[],
                datas=[
                ('\Sound','Sound')],
                hiddenimports=[],

            et je fais un petit coup de : pyinstaller monjeu.spec

            Il me retourne une erreur : "771 INFO: Appending 'datas' from .spec

            Unable to find "\Sound" when adding binary and data files"

            J'ai essayé de changer plusieurs voir ce que contient datas, avec un chemin absolu, en testant avec des fichiers .mp3 isolés, en suivant la mise en forme de la doc, et ça me ressort toujours une erreur pour fichier non trouvé... Comprenez vous pourquoi s'il vous plait ?

            Merci

            Pourtant le folder /Sound est bien présent dans le dossier où se situe monjeu.py et monjeu.spec. 

            J'ai un peu tout essayé et checké github, que ce soit du fichier copié collé  à côté du spec dans le même dossier, ou avec le path complet. Il me retourne toujours "Unable to find "XXX" when adding binary and data files."

            Help svp :) 

            -
            Edité par Motherbrain31 16 janvier 2023 à 20:37:10

            • Partager sur Facebook
            • Partager sur Twitter
              17 janvier 2023 à 23:59:12

              à mon sens, il faut ajouter pygame dans ta liste hiddenimports
              • Partager sur Facebook
              • Partager sur Twitter

              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)

                19 janvier 2023 à 10:00:44

                fred1599 a écrit:

                à mon sens, il faut ajouter pygame dans ta liste hiddenimports


                Je viens d'esayer, sans succès malheureusement, la même erreur reste retournée : "12033 INFO: Appending 'datas' from .spec
                Unable to find "\Sound" when adding binary and data files."
                Mais merci de ta proposition
                • Partager sur Facebook
                • Partager sur Twitter
                  19 janvier 2023 à 18:05:38

                  Bah le message semble dire que \Sound n'est pas trouvé... si le répertoire se trouve au même endroit que l'endroit où tu exécutes, Sound sans antislash pourrait passer.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  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)

                    21 janvier 2023 à 15:54:35

                    Motherbrain31 a écrit:

                    "12033 INFO: Appending 'datas' from .spec

                    Unable to find "\Sound" when adding binary and data files."

                    Si on doit ajouter le chemin des fichiers, il faut savoir à quoi ressemblent ces chemins.

                    Notamment que \machin est un nom absolu, un répertoire à la racine du disque et pas un nom relatif au répertoire courant.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 janvier 2023 à 0:03:01

                      Il est possible de créer un exécutable standalone qui contient déjà les assets en son sein. Pour cela, vous pouvez utiliser l'outil PyInstaller. Il vous permet de créer un exécutable qui inclut automatiquement tous les fichiers nécessaires pour votre application, y compris les fichiers d'assets.

                      Pour inclure vos fichiers d'assets dans l'exécutable généré, vous devrez utiliser l'option --add-data de PyInstaller. Cela vous permet de spécifier les fichiers à inclure dans l'exécutable, ainsi que leur emplacement dans l'exécutable.

                      Par exemple, si vous souhaitez inclure un fichier de son appelé "Foostep.mp3" situé dans le répertoire "Sound" de votre projet, vous devrez utiliser la commande suivante :

                      pyinstaller --add-data "Sound/Foostep.mp3:Sound" mon_jeu.py
                      

                      Cela inclura le fichier "Foostep.mp3" dans l'exécutable généré, et le placer dans un répertoire "Sound" à l'intérieur de l'exécutable. Vous pouvez ajouter autant de fichiers que vous le souhaitez en utilisant cette option.

                      Il est important de noter que l'emplacement des fichiers dans l'exécutable sera le même que celui spécifié dans l'option "--add-data". Il est donc important de s'assurer que les chemins d'accès aux fichiers dans votre code correspondent à ceux spécifiés dans l'option "--add-data".

                      Il est aussi possible d'utiliser des outils tel que cx_freeze pour générer un exécutable standalone incluant les assets, mais il faut utiliser une configuration pour inclure les assets.



                      • Partager sur Facebook
                      • Partager sur Twitter

                      Créer un executable - Comment inclure les assets

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown