Partage
  • Partager sur Facebook
  • Partager sur Twitter

cx_freeze et pysfml

Sujet résolu
    6 décembre 2015 à 23:08:25

    Bonjour a tous, cela fait plusieurs heures de recherches sur google que je tente de résoudre ce problème:

    Le but est de mettre mon petit jeu, fait avec pysfml, en .exe, j'utilise cx_freeze, et j'obtiens ceci

    D:\Programmation\Python\Python\build\exe.win32-3.2>main.exe
    Traceback (most recent call last):
      File "D:\Programmation\Python\Python\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 27, in <module>
        exec(code, m.__dict__)
      File "main.py", line 3, in <module>
      File "D:\Programmation\Python\Python\session.py", line 3, in <module>
        from etage import *
      File "D:\Programmation\Python\Python\etage.py", line 3, in <module>
        from joueur import *
      File "D:\Programmation\Python\Python\joueur.py", line 3, in <module>
        from attaques import *
      File "D:\Programmation\Python\Python\attaques.py", line 3, in <module>
        from menu import *
      File "D:\Programmation\Python\Python\menu.py", line 3, in <module>
        from fonctions_recurrentes import *
      File "D:\Programmation\Python\Python\fonctions_recurrentes.py", line 3, in <module>
        import sfml as sf
      File "D:\Programmation\Python\Python\lib\site-packages\sfml\__init__.py", line 13, in <module>
        from sfml.graphics import *
      File "ExtensionLoader_sfml_graphics.py", line 22, in <module>
      File "ExtensionLoader_sfml_graphics.py", line 14, in __bootstrap__
      File "graphics.pxd", line 16, in init sfml.graphics (src/sfml\graphics.cpp:40567)
    AttributeError: 'module' object has no attribute 'Rectangle'

    Pouvez vous m'aider svp ?

    • Partager sur Facebook
    • Partager sur Twitter
    Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
      7 décembre 2015 à 7:34:11

      Il semblerait qu'il ne trouve pas Rectangle. Alors la question est : qu'est Rectangle ? Où est-ce défini ? Aussi quel binding pour Python utilises-tu ? En regardant rapidement dans pysfml-cython, je n'ai pas trouvé de classe Rectangle mais RectangleShape.

      • Partager sur Facebook
      • Partager sur Twitter
        7 décembre 2015 à 12:21:53

        Binding ? Qu'est ce que ça ?

        Et pour ce qui est du rectangle, je sais pas, je l'ai pas utilisé une seule fois dans mon code...

        • Partager sur Facebook
        • Partager sur Twitter
        Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
        Anonyme
          7 décembre 2015 à 14:05:58

          Il y a eu le même problème sur ce topic, si ça peut t'aider...

          J'y connais pas grand chose à cx_freeze, j'ai pas windows

          • Partager sur Facebook
          • Partager sur Twitter
            7 décembre 2015 à 15:02:58

            SFML est écrit en C++. Un binding c'est écrire un code qui permettra d'utiliser une librairie avec un autre langage. Dans ce cas-ci, pySFML est un binding pour Python. Comme expliqué sur le site les bindings autre que C et .Net ne sont pas supportés officiellement car développé par la communauté. Il en existe parfois plusieurs. Donc ma question était : quel binding pour SFML as-tu utilisé ? As-tu un lien vers le code source de ce binding ? Si non, comment l'as-tu installé ?

            Le lien d'OldProgrammer est fort intéressant. Mais il n'explique pas le fond du problème. Ce sera pas mal de comprendre ce qui foire. Mais pour ça il faut plus d'info.

            • Partager sur Facebook
            • Partager sur Twitter
              7 décembre 2015 à 15:24:17

              En poussant un peu l'investigation, je suis tombé sur ce binding pour Python : https://github.com/Sonkun/python-sfml

              Et je trouve dans l'historique des commits ceci : https://github.com/Sonkun/python-sfml/commit/ec01271072097052ac65cf85401e5467cb1bac49 Donc le 16 Août 2015, ils ont changé le nom de la classe Rectangle en Rect. Je suppose que tu as une version antérieure à cette date. Une mise à jour serait peut-être une possible solution.

              • Partager sur Facebook
              • Partager sur Twitter
                7 décembre 2015 à 17:54:55

                oldProgrammer a écrit:

                Il y a eu le même problème sur ce topic, si ça peut t'aider...

                J'y connais pas grand chose à cx_freeze, j'ai pas windows


                Je l'ai lu, et relu, ça marche pas.

                Dan737 a écrit:

                En poussant un peu l'investigation, je suis tombé sur ce binding pour Python : https://github.com/Sonkun/python-sfml

                Et je trouve dans l'historique des commits ceci : https://github.com/Sonkun/python-sfml/commit/ec01271072097052ac65cf85401e5467cb1bac49
                Donc le 16 Août 2015, ils ont changé le nom de la classe Rectangle en Rect. Je suppose que tu as une version antérieure à cette date. Une mise à jour serait peut-être une possible solution.

                Je vais essayer de suite cette version ^^

                • Partager sur Facebook
                • Partager sur Twitter
                Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
                  7 décembre 2015 à 19:31:51

                  Je suis encore plus dans le pâté <.< A cause d'un second bug j'ai voulu réinstaller python et pysfml, sauf que le site python-sfml a disparu (erreur DNS) et j'arrive pas a installer le code github ='C
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
                    7 décembre 2015 à 22:04:40

                    Bon, alors le binding, c'est le lien que tu m'as envoyé, je suis sur python 3.4, et cx_freeze vient aussi du lien que tu m'as envoyé, donc pysfml remarche, si t'as un truc pour le problème a l'origine de ce post, je suis toujours preneur (en tout cas déjà merci de m'avoir permis de retrouver SFML)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
                      7 décembre 2015 à 22:34:15

                      Je viens de regarder dans le fichier .whl et je constate qu'il n'est pas basé sur le dernier commit présent sur GitHub.

                      Donc je crains que pour pouvoir utiliser correctement cette librairie, tu vas devoir toi-même la compiler. C'est malheureusement une route semée d’embûches. :(

                      PS : Ton Python 3.4 est 32 bits ou 64 bits ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 décembre 2015 à 22:45:50

                        32 bits.... compiler moi même ? Genre... comme on compile un logiciel en C ? Ou bien pire que ça ?

                        PS: (mais mon ordi est en 64 bits)

                        -
                        Edité par Reiex 7 décembre 2015 à 22:46:09

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms
                          8 décembre 2015 à 7:23:55

                          En y réfléchissant encore, je ne pense finalement pas que compiler la dernière version va résoudre ton problème. Comme j'ai pu voir, la classe Rectangle existe bien dans ta version.

                          J'essaie chez moi en locale et si je trouve quelque chose, je te le fais savoir. Mais je pense que c'est plutôt la manière dont cx_Freeze place les différents fichiers qui pose problème.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 décembre 2015 à 9:36:59

                            Bon après quelques tests, j'ai pu arriver à faire un exécutable en suivant les instructions du lien donné par OldProgrammer. Il fallait donc bien exclure la librairie sfml du build, et ensuite on la recopier dans le dossier telle quelle. Comme ça fonctionne, et comme on ne veut pas faire ces choses à la main au risque d'oublier d'ici un an comment ça fonctionnait, j'ai ajouté la lib SFML dans le setup.py comme si c'était juste des fichiers à copier.

                            Voici mon setup.py

                            import sys
                            import os.path
                            from cx_Freeze import setup, Executable
                            

                            Dependencies are automatically detected, but it might need fine tuning.

                            Manually copy sfml dir from site-packages into the build dir

                            python_dir = sys.exec_prefix sfml_dir = os.path.join(python_dir, "lib", "site-packages", "sfml") include_files = [(sfml_dir, "sfml")] build_exe_options = {"includes": ["numbers"], "excludes": ["sfml"], "include_files": include_files}

                            GUI applications require a different base on Windows (the default is for a

                            console application).

                            base = None if sys.platform == "win32":

                            base = "Win32GUI"
                            

                            setup( name = "test_sfml",

                                version = "0.1",
                                description = "Test pySFML!",
                                options = {"build_exe": build_exe_options},
                                executables = [Executable("test.py", base=base)])
                            
                            </pre>

                            -
                            Edité par Dan737 8 décembre 2015 à 9:37:29

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 décembre 2015 à 12:28:57

                              Mec, merci !!!!

                              Ca marche enfin !!! Je met le sujet en résolu et je te spam de +1 ;D

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Créateur de mauvaises blagues et de mauvais jeux depuis 1999 - Endless-caves - Endless-rooms

                              cx_freeze et pysfml

                              × 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