Exécutable à partir d'un fichier python

Résolu

Bonjour,

Je pensais faire un exécutable d'un code python pour Windows. Pour pas avoir besoin d'ouvrir pycharm. J'ai trouvé ceci CX FREEZE, j'ai bien installé ce dernier dans l'invite de commande Windows, mais pour le fichier python "setup.py", je ne sais pas où le créer : dans pycharm ou Windows ? Merci de ton aide !


Windows / Firefox 120.0


“Impose ta chance, serre ton bonheur et va vers ton risque. A te regarder, ils s’habitueront.”  René Char 

11 réponses

Résumé de la discussion

Créer un exécutable Windows à partir d'un script Python sans IDE, via cx_Freeze, et l'emplacement du fichier setup.py (PyCharm ou Windows) est discuté, avec des conseils pratiques. Les solutions privilégient PyInstaller comme outil principal et incluent des interfaces comme auto-py-to-exe pour simplifier l'usage, en expliquant que PyInstaller génère des dossiers build et dist et un fichier .spec. Par ailleurs, certains rappellent de nommer correctement les fichiers sans espaces et que l'exécutable n'est utile que si Python n'est pas présent sur la machine cible; sinon, exécuter le script peut suffire.

Bobot (l’IA à votre service)
  1. Contributeur

    Quentin n'est visiblement pas familier de l'invite de commande.

    Pour résumer et clarifier pour Quentin, dans ce post de Quentin :

    https://forums.commentcamarche.net/forum/affich-37965889-executable-a-partir-d-un-fichier-python#p37975233

    On peut voir que :

    cd C:\Users\quent\PycharmProjects\pythonProject

    fonctionne et permet à quentin de se déplacer dans "C:\Users\quent\PycharmProjects\pythonProject".

    et que :

    C:\Users\quent\PycharmProjects\pythonProject4\venv\Scripts\pyinstaller LES_ENSEMBLES.py

    lance effectivement pyinstaller qui doit donc bien être dans le répertoire "C:\Users\quent\PycharmProjects\pythonProject4\venv\Scripts\pyinstaller" mais que son exécution échoue avec une erreur :

    1038 INFO: PyInstaller: 6.3.0
    1039 INFO: Python: 3.12.0
    1064 INFO: Platform: Windows-10-16.0.19645-SPe
    1065 INFO: wrote C:\Users\quent\PycharmProjects\pythonProject\LES_ENSEMBLES.spec
    Script 'C:\Users\quent\PycharmProjects\pythonProject\LES_ENSEMBLES.py' not found

    L'exécution du programme pyinstaller échoue car le répertoire "C:\Users\quent\PycharmProjects\pythonProject\" ne contient pas un fichier "LES_ENSEMBLES.py".

    En partant de l'hypothèse que "C:\Users\quent\PycharmProjects\pythonProject\" contient "LES_ ENSEMBLES.py" (avec un espace après le underscore) et non pas "LES_ ENSEMBLES.py", la séquence correcte de commandes, après avoir ouvert l'invite de commande serait :

    cd C:\Users\quent\PycharmProjects\pythonProject
    C:\Users\quent\PycharmProjects\pythonProject4\venv\Scripts\pyinstaller "LES_ ENSEMBLES.py"

     Si quentin a renommé son fichier "LES_  ENSEMBLES.py" en "LES_ ENSEMBLES.py", sans espace, comme on le sui conseille, la séquence correcte de commandes, après avoir ouvert l'invite de commande serait :

    cd C:\Users\quent\PycharmProjects\pythonProject
    C:\Users\quent\PycharmProjects\pythonProject4\venv\Scripts\pyinstaller LES_ENSEMBLES.py

    tu peux coller du texte dans l'invite de commande (clic droit - coller). Fais le pour éviter les fautes de frappe.

    1. Merci, cela à fonctionné, ENFIN !

      C'est le dossier ou il y a LES_ENSEMBLES.py qu'il faut copier pour l'exécuter sur un pc ou il n'y a pas python d'installé ?

      J'ai vérifié, LES_ENSEMBLES est en .py, n'est pas devenu .exe ?

    2. @quentin2121

      regarde nos réponse plus haut

      on te l'a déjà expliqué !

      dans le dossier qui contient le .py, il a un dossier qui contient un autre dossier

      qui contient le .exe

      Relis nos réponses et tu sauras ce qu'il faut faire

    3. Contributeur
      @quentin2121

      Comme il y a 87 réponses, on peut aussi consulter la doc :

      https://www.pyinstaller.org/en/stable/usage.html

      PyInstaller analyzes myscript.py and:

      • Writes myscript.spec in the same folder as the script.
      • Creates a folder build in the same folder as the script if it does not exist.
      • Writes some log files and working files in the build folder.
      • Creates a folder dist in the same folder as the script if it does not exist.
      • Writes the myscript executable folder in the dist folder.
      In the dist folder you find the bundled app you distribute to your users.
  2. Salut,

    Personne ne se moque, les 80 posts ne traitent pas de Python, mais de l'utilisation du terminal, de la navigation dans l'arborescence des répertoires et du nommage des fichiers.

    Évite les espaces dans les noms de fichiers ou tu le précises avec les simples guillemets '' :

    C:\Users\quent\PycharmProjects\pythonProject\'LES_ ENSEMBLES.py'

    Autre astuce :

    Ton terminal, peu importe l'OS, gère le glisser/déposer, ce qui permet à partir de ton navigateur de fichier d'obtenir le chemin absolu dans ton terminal.

    1. Hé ben voila: dir te donne la liste des fichiers et dossiers contenus dans

      le dossier courant

      (ici: C:\WINDOWS\System32 car tu tapes la commande alors que tu es dans

      ce dossier)

      Tu n'as plus qu'a faire cd chemin_ou_est_situé_le_code_Python

      puis faire un dir

      tu verras bien si dans la liste qui s'affiche on voit le fichier LES_ENSEMBLES.py

      (pourquoi un nom de fichier en majuscules, d'ailleurs ?)

      1. Le fichier LES_ENSEMBLES.py est bien dans le dossier

        En majuscule, c'est pour bien le repérer !

      2. Modérateur
        @quentin2121

        À ce moment là il faut l'écrire comme il faut (en respectant les minuscules et les majuscules). On attend toujours que tu nous copies-colles le résultat de la commande dir (dans le répertoire adéquat) pour voir ce qui cloche. Un truc que tu peux sans doute faire, c'est utiliser power shell au lieu des commandes ms-dos. À l'image d'un terminal sous Linux, il supporte l'auto complétion, c'est-à-dire qu'en utilisant la touche "tabulation", il complète les noms de dossiers/fichiers.

      3. @quentin2121

        tu es un drôle de comique, toi !  ouvre les yeux

        moi je vois un fichier

        LES_   ENSEMBLES.py

        et pas 

        LES_ENSEMBLES.py

        et dans l'explorateur Windows, ça ne te sautait pas aux yeux ?

        et dégage un peu tous ces fichiers .spec inutiles

        Et prend aussi une bonne habitude:

        mettre des underscores  ( _ ) au lieu d'espaces dans les noms de fichiers:

        creer_un_pdf.py

      4. Modérateur
        @Phil_1857

         Es-tu parvenu enfin à lancer la commande pyinstaller ?

    2. Salut,

      Je conseillerais l'installation et l'utilisation de auto-py-to-exe qui utilise PyInstaller

      Il propose une interface graphique basée sue Chrome, qui permet en quelques clics de générer son package exe

      Je l'ai testé sur Windows, macOS et Linux sans soucis.

      https://pypi.org/project/auto-py-to-exe/

      1. Salut Diablo,

        Hou la,Hou la,Hou la !

        Ne va pas compliquer encore plus que ça l'est :-) :-) :-)

        Si tu as lu toute cette suite de messages, tu as du voir que ça n'est pas

        simple

        D'autant que Quentin a l'air d'être arrivé au bout:

        En regardant l'image postée hier à 19h10, on voit les dossiers

        dist, build et le fichier LES_ENSEMBLES.spec créés par pyinstaller

        Donc, dans dist, il y a surement un dossier LES_ENSEMBLES qui contient

        tous les fichiers utiles dont LES_ENSEMBLES.exe

        Attendons sa réponse à ma question ...

      2. @Phil_1857

        Bonjour Phil,

        Dans le dossier dist, il n'y a rien dedans.

      3. @quentin2121

        Bizarre, bizarre ............

        Il faudrait refaire un essai

        1_ tu supprimes les dossiers build et dist et aussi le fichier LES_ENSEMBLES.spec

        2_ tu ouvres l'invite de commandes Windows

        3_ Tu tapes cd chemin\vers\le\dossier\du\py

        4_ Tu tapes

        chemin\vers\le\dossier_pyinstaller\pyinstaller LES_ENSEMBLES.py

        N'oublie pas de virer la copie du .py que tu as mise dans le dossier où

        est pyinstaller

        Et on voit ce que ça donne ...

      4. @quentin2121

        'C:\Users\quent\PycharmProjects\pythonProject\LES_ENSEMBLES.py' not found

        ca veut dire que ton fichier .py n'est pas dans

        C:\Users\quent\PycharmProjects\pythonProject

        Tu avais pourtant bien dit qu'il était là-dedans ?

    3. C'est bizarre tout ça, on a l'impression que tu ne comprends pas tout ce qu'on te raconte : sur ton image, on voit un chemin avec py.exe. Donc tu as déjà un exe qui correspond à un fichier py.py ? C'est ça ou pas ?

      D'autre part as-tu compris que, de toutes façons, tu n'as pas besoin de créer un .exe ?

      Moi, je n'utilise pas Pycharm mais Idle comme IDE, mais tu créés forcément un fichier toto.py (par exemple) dans un répertoire. Et pour l'exécuter, il suffit de double-cliquer sur le fichier dans l'explorateur:

      Encore une fois, une .exe, c'est utile si tu veux exécuter ton code sur un PC sur lequel n'est pas installé Python.

      1. J'ai essayé l'exécutable sur un autre pc, j'ai un message d'erreur que le chemin n'est pas le bon, pour le répertoire du programme, alors que je l'indique bien !

        C:\Users\quent\PycharmProjects\pythonProject

      2. @quentin2121

        @ Phil :           Ton fichier porte l'extension .bat ou .exe ?

      3. Modérateur
        @quentin2121

        • Est-ce que sur ton autre PC, le chemin dont tu parles a un sens ?

        • Au pire tu n'utilises pas le script de Phil et tu tapes directement la commande avec les arguments adéquats (cf #1) depuis PowerShell.

          • L'avantage de PowerShell (comparé aux commandes ms-dos) fournit l'auto-complétion, c'est-à-dire que quand tu tapes une commande, la touche tabulation permet de compléter l'argument que tu es en train de taper. C'est donc un moyen efficace de taper plus rapidement / facilement et sans erreur le chemin d'un fichier.



      4. @mamiemando

        Bonjour Mamiemondo,

        Le chemin à du sens oui, mais comme je n'ai pas python d'installé, ni PyCharm, je comprends que le chemin n'aboutisse pas.

        J'essaierai avec PowerShell, "py installer" !

      5. Modérateur
        @quentin2121

        Je vois difficilement comment C:\Users\quent\PycharmProjects\pythonProject peut exister sur une machine sur laquelle PyCharm n'est pas installé. As-tu compris que le ".bat" de Phil ne servait qu'à générer sur ta machine de développement un ".exe" que tu devrais pouvoir redistribuer sur une machine sans pycharm ? Et donc qu'il n'y a aucune raison de lancer ce ".bat" sur une machine qui n'est pas ta machine de développement ? En fait, Phil a voulu bien faire en te parlant de ce script, mais j'ai l'impression que ça t'a complètement embrouillé. Autre explication, j'ai mal compris ton problème et dans ce cas, il faudrait clarifier.

    4. Oui, c'est bien ça: ça évite d'écrire la commande à la main avec le chemin vers pyinstaller et le chemin vers le fichier + nom du fichier .py

      Supprime quand même le -p à la fin.

      1. 
        echo off
        
        
        set /p py_dir=C:\Users\quent\PycharmProjects\pythonProject\LES ENSEMBLES :
        cd %py_dir%
        
        
        set /p py_file=PycharmProjects :
        "C:\Program Files (x86)\Python\Scripts\pyinstaller" %py_file% -p C:\Users\quent\Dev\Python\projects\base_lib
        
        
        pause

        1. Modérateur

          Il y a une confusion Quentin. Peut-être n'as tu pas bien compris le message #5. Il ne faut pas corriger les lignes set /p : ce qui est écrit derrière est le message de question posé par le script quand tu l'exécutes (c'est ce que tu vois dans les captures d'écran postées par Phil dans #6).

          • Ce que tu saisis au clavier en réponse est mémorisé dans la variable. Il est donc normal qu'aucun chemin n'apparaisse.
          • Ce que tu as écrit aurait sans doute du sens sans l'option /p, afin d'imposer la valeur des variables py_dir et py_file.

          Ensuite, rien ne dit que dans ton cas, tu aies un dossier base_lib. Et rien ne dit que tu as réellement besoin de passer l'option -p. C'est là que Phil range sur son ordinateur certains de ses packages python qu'il aime utiliser, mais rien ne dit que ce soit ton cas. Il est fort probable que dans ton cas, tu n'aies pas besoin de l'option -p. C'est pourquoi je te renvoie à la documentation des options de pyinstaller pour bien comprendre ce quelles font.

          Bonne chance

        2. @mamiemando


          echo off


          set /p py_dir=Repertoire du programme :
          cd %py_dir%


          set /p py_file=Nom du programme :
          "C:\Program Files (x86)\Python\Scripts\pyinstaller" %py_file% -p


          pause

        3. Modérateur
          @quentin2121
          • Parfait, le script semble maintenant correct :-) Dans la fenêtre noire que tu as reportée en capture d'écran, il ne te reste plus qu'à taper à la suite de la première question le dossier dans lequel est localisé ton fichier ".py", entrée, puis suite à la deuxième question, le nom dudit fichier ".py".
          • Le truc important, c'est que ce script n'a absolument rien d'obligatoire. Phil te l'a proposé car dans son cas, il le trouve pratique, et il se dit que ce sera peut-être le cas pour toi aussi. Mais fondamentalement, la seule chose qui compte vraiment, c'est invoquer pyinstaller.exe avec les bons paramètres.

          Bonne chance

        4. @mamiemando

          En fait quand je rentre le chemin du dossier où est le fichier .py, ça me répond chemin introuvable.

          Le bon chemin, c'est celui-là :

          Ce n'est pas le même où est installé Pycharm ! Il faut dire que ce fichier .py a été créé lors de ma première installation de Pycharm, ceci expliquant cela peut être !

          Sinon pour moi, c'est plus simple, après avoir installé en cmd pyinstaller, de cliquer sur mon fichier .py qui ainsi, s'ouvre direct !

      2. oui à condition de changer le chemin vers pyinstaller comme l'indique

        Mamiemando dans son dernier message

        Mais j'espère que tu as bien compris que ton peux exécuter ton code

        sans utiliser pyinstaller en double-cliquanr sur le .py dans l'explorateur

        1. La ligne 3 demande le répertoire du programme:

          la ligne 4 fait un change directory pour s'y placer

          La ligne 6 demande le nom du programme:

          Et c'est parti !

          1. En gros, je peux copier-coller ton code en .bat ?

        2. Bonjour,

          Même sans créer d'exécutable, on peut lancer un programme en faisant un double clic sur le fichier .py dans l'explorateur ...

          J'utilise pyinstaller pour passer un code à quelqu'un qui n'a pas installé l'environnement Python sur son PC, il lui faut donc un .exe puisqu'il n'a pas l'interpréteur pour exécuter directement un .py

          Pour créer un exe, je me suis fait un petit fichier .bat :

          echo off
          
          set /p py_dir=Repertoire du programme :
          cd %py_dir%
          
          set /p py_file=Nom du programme :
          "C:\Program Files (x86)\Python\Scripts\pyinstaller" %py_file% -p C:\Phil\Dev\Python\projects\base_lib
          
          pause

          (Le répertoire à la suite de l'option -p contient des fichiers importés éventuellement dans mon code principal) 

          1. À quelle ligne du code, tu choisis le chemin complet du fichier python concerné ?

          2. Modérateur
            @quentin2121

            Bonjour Quentin

            • Voir ici. La commande set /p permet de d'initialiser une variable de manière interactive.
              • Quand tu exécutes le script de Phil_1857, il suffit de répondre aux questions ("Repertoire du programme :" et "Nom du programme :") pour initialiser respectivement les variables py_dir et py_file.
              • Cependant, ce script peut nécessiter quelques corrections
                • le chemin vers pyinstaller.exe, de sorte à ce qu'il soit correct par rapport à ton installation ;
                • le(s) chemin(s) derrière l'option -p si ton programme dépend d'imports spécifiques -- si tu n'en as pas, tu peux juste supprimer cette option.
            • Le point important, c'est de déterminer quelles options de pyinstaller.exe sont pertinentes dans ton cas. Ensuite, libre à toi d'écrire un script dans l'esprit de celui de Phil_1857 pour te simplifier la vie.
            • As-tu toutes tes réponses ? Si oui, peux-tu basculer le sujet en résolu ?

            Bonne chance

        3. Modérateur

          Bonjour Quentin

          Le fichier setup.py est un fichier placé à la racine de ton projet, propre à setuptools, qui permet de générer un paquet python (.whl, .egg) et/ou linux (.rpm, .deb).

          De nos jours, on le remplace de plus en plus au profit de poetry bien plus moderne, pratique et élégant (qui lui repose sur le fichier pyproject.toml).

          Afin de te faire une idée sur ces différentes technologies, tu peux jeter un œil à cette page et cette page.

          Je ne connais pas cx-freeze et je ne sais pas s'il impose d'utiliser setuptools. N'étant pas windowsien, je ne m'intéresse pas vraiment à la génération d'exécutable standalone, mais je sais que les gens utilisent aussi souvent pyinstaller ou py2exe. Quelques exemples d'utilisation ici. Typiquement, si ton script python n'est composé que d'un fichier, tu peux te contenter de :

          pyinstaller yourfile.py -F --onefile

          Bonne chance

          1. Bonjour Mamiemondo,

            Merci pour ta réponse. J'ai installé dans Pycharm la commande :

            pip install -U pyinstaller

            Maintenant, je peux exécuter mes fichiers python en un clic depuis l'explorateur !