Ejecutable a partir de un archivo Python

Resuelto

Hola,

Estaba pensando en crear un ejecutable de un código Python para Windows, para no tener que abrir PyCharm. Encontré esto CX FREEZE, lo he instalado correctamente en el símbolo del sistema de Windows, pero no sé dónde crear el archivo Python "setup.py": ¿en PyCharm o en Windows? ¡Gracias por tu ayuda!



11 respuestas

  1. Hola,

    Nadie se burla, los 80 posts no tratan sobre Python, sino sobre el uso del terminal, la navegación por la estructura de directorios y la nomenclatura de archivos.

    Evita los espacios en los nombres de archivos o lo especificas con comillas simples '' :

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

    Otro consejo :

    Tu terminal, independientemente del sistema operativo, maneja el arrastrar y soltar, lo que permite desde tu navegador de archivos obtener la ruta absoluta en tu terminal.

    2
    1. Moderador

      Hola Quentin

      El archivo setup.py es un archivo que se coloca en la raíz de tu proyecto, propio de setuptools, que permite generar un paquete python (.whl, .egg) y/o linux (.rpm, .deb).

      Hoy en día, se está reemplazando cada vez más en favor de poetry mucho más moderno, práctico y elegante (que se basa en el archivo pyproject.toml).

      Para que te hagas una idea sobre estas diferentes tecnologías, puedes echar un vistazo a esta página y esta página.

      No conozco cx-freeze y no sé si impone usar setuptools. Al no ser un usuario de Windows, realmente no me interesa la generación de ejecutables independientes, pero sé que la gente también utiliza con frecuencia pyinstaller o py2exe. Algunos ejemplos de uso aquí. Típicamente, si tu script python consiste en un solo archivo, puedes contentarte con :

      pyinstaller yourfile.py -F --onefile

      Buena suerte

      1
      1. Hola Mamiemondo,

        Gracias por tu respuesta. He instalado en Pycharm el comando:

        pip install -U pyinstaller

        ¡Ahora puedo ejecutar mis archivos de Python con un solo clic desde el explorador!

        0
    2. Es raro todo esto, da la impresión de que no entiendes todo lo que te contamos: en tu imagen, vemos un camino con py.exe. ¿Entonces ya tienes un exe que corresponde a un archivo py.py? ¿Es eso o no?

      Por otro lado, ¿entendiste que, de todas formas, no necesitas crear un .exe?

      Yo no utilizo Pycharm, sino Idle como IDE, pero necesariamente creas un archivo toto.py (por ejemplo) en un directorio. Y para ejecutarlo, basta con hacer doble clic en el archivo en el explorador:

      Una vez más, un .exe es útil si quieres ejecutar tu código en un PC donde no esté instalado Python.

      1
      1. He intentado el ejecutable en otro pc, recibo un mensaje de error que indica que la ruta no es correcta para el directorio del programa, ¡aunque la indico bien!

        C:\Users\quent\PycharmProjects\pythonProject

        0
      2. @quentin2121

        @ Phil :           ¿Tu archivo lleva la extensión .bat o .exe?

        0
      3. Moderador
        @quentin2121
        • ¿Tiene sentido la ruta de la que hablas en tu otro PC?
        • En el peor de los casos, no uses el script de Phil y escribe directamente el comando con los argumentos adecuados (ver #1) desde PowerShell.
          • La ventaja de PowerShell (comparado con los comandos ms-dos) es que proporciona la autocompletación, es decir, cuando escribes un comando, la tecla de tabulación permite completar el argumento que estás escribiendo. Por lo tanto, es un medio efectivo para escribir más rápida y fácilmente, y sin errores, la ruta de un archivo.
        0
      4. @mamiemando

        Hola Mamiemondo,

        El camino tiene sentido, sí, pero como no tengo instalado Python, ni PyCharm, entiendo que el camino no llegue a ningún lado.

        Lo intentaré con PowerShell, ¡"py installer"!

        0
      5. Moderador
        @quentin2121

        Difícilmente veo cómo C:\Users\quent\PycharmProjects\pythonProject puede existir en una máquina donde PyCharm no está instalado. ¿Entendiste que el ".bat" de Phil solo sirve para generar en tu máquina de desarrollo un ".exe" que deberías poder redistribuir en una máquina sin PyCharm? Entonces, no hay razón para ejecutar este ".bat" en una máquina que no es tu máquina de desarrollo. De hecho, Phil quiso hacerlo bien al hablarte de este script, pero tengo la impresión de que eso te ha confundido completamente. Otra explicación, tal vez no entendí tu problema y en ese caso, sería necesario aclararlo.

        0
    3. Hola,

      Recomendaría la instalación y el uso de auto-py-to-exe que utiliza PyInstaller

      Ofrece una interfaz gráfica basada en Chrome, que permite generar su paquete exe en unos pocos clics

      Lo he probado en Windows, macOS y Linux sin problemas.

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

      1
      1. Hola Diablo,

        ¡Uy uy uy!

        No compliques las cosas más de lo que ya son :-) :-) :-)

        Si has leído toda esta serie de mensajes, habrás visto que no es

        simple

        Sobre todo porque Quentin parece haber llegado al final:

        Al mirar la imagen publicada ayer a las 19:10, vemos las carpetas

        dist, build y el archivo LES_ENSEMBLES.spec creado por pyinstaller

        Entonces, en dist, seguro que hay una carpeta LES_ENSEMBLES que contiene

        todos los archivos útiles, incluido LES_ENSEMBLES.exe

        Esperemos su respuesta a mi pregunta ...

        0
      2. @Phil_1857

        Hola Phil,

        En la carpeta dist, no hay nada dentro.

        0
      3. @quentin2121

        Extraño, extraño ............

        Sería necesario hacer otra prueba

        1_ eliminas las carpetas build y dist y también el archivo LES_ENSEMBLES.spec

        2_ abres el símbolo del sistema de Windows

        3_ Escribes cd ruta\hacia\la\carpeta\del\py

        4_ Escribes

        ruta\hacia\la\carpeta_pyinstaller\pyinstaller LES_ENSEMBLES.py

        No olvides quitar la copia del .py que has colocado en la carpeta donde

        está pyinstaller

        Y vemos qué resulta ...

        0
      4. @quentin2121

        'C:\Users\quent\PycharmProjects\pythonProject\LES_ENSEMBLES.py' no encontrado

        eso significa que tu archivo .py no está en

        C:\Users\quent\PycharmProjects\pythonProject

        ¿Pero tú habías dicho que estaba allí dentro?

        0
    4. Hola,

      Aun sin crear un ejecutable, se puede ejecutar un programa haciendo doble clic en el archivo .py en el explorador ...

      Utilizo pyinstaller para pasar un código a alguien que no ha instalado el entorno de Python en su PC, por lo que necesita un .exe ya que no tiene el intérprete para ejecutar directamente un .py

      Para crear un exe, me hice un pequeño archivo .bat :

      echo off set /p py_dir=Directorio del programa : cd %py_dir% set /p py_file=Nombre del programa : "C:\Program Files (x86)\Python\Scripts\pyinstaller" %py_file% -p C:\Phil\Dev\Python\projects\base_lib pause

      (El directorio que sigue a la opción -p contiene archivos importados potencialmente en mi código principal)

      0
      1. ¿En qué línea del código eliges la ruta completa del archivo Python correspondiente?

        0
      2. Moderador
        @quentin2121

        Hola Quentin

        • Ver aquí. El comando set /p permite inicializar una variable de manera interactiva.
          • Cuando ejecutas el script de Phil_1857, solo tienes que responder a las preguntas ("Directorio del programa :" y "Nombre del programa :") para inicializar respectivamente las variables py_dir y py_file.
          • Sin embargo, este script puede requerir algunas correcciones
            • el camino hacia pyinstaller.exe, para que sea correcto con respecto a tu instalación ;
            • el/los camino/s detrás de la opción -p si tu programa depende de imports específicos -- si no los tienes, puedes simplemente eliminar esta opción.
        • El punto importante es determinar qué opciones de pyinstaller.exe son relevantes en tu caso. Luego, queda a tu elección escribir un script en el espíritu del de Phil_1857 para facilitarte la vida.
        • ¿Tienes todas tus respuestas? Si es así, ¿puedes marcar el tema como resuelto ?

        Buena suerte

        0
    5. La línea 3 solicita el directorio del programa:

      la línea 4 cambia de directorio para colocarse allí

      La línea 6 solicita el nombre del programa:

      ¡Y ahí vamos!

      0
      1. En resumen, ¿puedo copiar y pegar tu código en .bat?

        0
    6. sí, siempre que cambies la ruta hacia pyinstaller como indica

      Mamiemando en su último mensaje

      Pero espero que hayas comprendido bien que puedes ejecutar tu código

      sin usar pyinstaller haciendo doble clic en el .py en el explorador

      0
      1.   echo off set /p py_dir=C:\Users\quent\PycharmProjects\pythonProject\LOS CONJUNTOS : 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

        0
        1. Moderador

          Hay una confusión, Quentin. Quizás no has comprendido bien el mensaje #5. No debes corregir las líneas set /p: lo que está escrito detrás es el mensaje de pregunta que plantea el script cuando lo ejecutas (es lo que ves en las capturas de pantalla publicadas por Phil en #6).

          • Lo que escribes por teclado en respuesta se almacena en la variable. Por lo tanto, es normal que no aparezca ninguna ruta.
          • Lo que has escrito probablemente tendría sentido sin la opción /p, para imponer el valor de las variables py_dir y py_file.

          A continuación, nada indica que en tu caso tengas una carpeta base_lib. Y nada indica que realmente necesites pasar la opción -p. Ahí es donde Phil coloca en su ordenador algunos de sus paquetes de Python que le gusta usar, pero nada indica que ese sea tu caso. Es muy probable que en tu caso no necesites la opción -p. Por eso te remito a la documentación de las opciones de pyinstaller para entender bien lo que hacen.

          Buena suerte

          0
        2. @mamiemando


          echo off


          set /p py_dir=Directorio del programa :
          cd %py_dir%


          set /p py_file=Nombre del programa :
          "C:\Program Files (x86)\Python\Scripts\pyinstaller" %py_file% -p


          pause

          0
        3. Moderador
          @quentin2121
          • Perfecto, el script parece correcto ahora :-) En la ventana negra que has reportado en la captura de pantalla, solo te queda escribir, después de la primera pregunta, la carpeta en la que se localiza tu archivo ".py", presionar enter, y luego, después de la segunda pregunta, el nombre del mencionado archivo ".py".
          • Lo importante es que este script no es en absoluto obligatorio. Phil te lo propuso porque en su caso lo encuentra práctico, y piensa que tal vez sea el caso para ti también. Pero, fundamentalmente, lo único que realmente importa es invocar pyinstaller.exe con los parámetros correctos.

          Buena suerte

          0
        4. @mamiemando

          De hecho, cuando ingreso la ruta de la carpeta donde está el archivo .py, me responde "ruta no encontrada".

          La ruta correcta es esta:

          ¡No es el mismo donde está instalado Pycharm! Hay que decir que este archivo .py fue creado durante mi primera instalación de Pycharm, ¡lo que puede explicar esto!

          De lo contrario, para mí es más fácil, después de haber instalado pyinstaller en cmd, hacer clic en mi archivo .py que así se abre directamente.

          0
      2. Sí, eso es: evita escribir el comando a mano con la ruta hacia pyinstaller y la ruta hacia el archivo + nombre del archivo .py

        De todos modos, elimina el -p al final.

        0
        1. Bueno, aquí está: el comando dir te da la lista de los archivos y carpetas contenidos en

          la carpeta actual

          (aquí: C:\WINDOWS\System32 porque escribes el comando mientras estás en

          esta carpeta)

          Solo tienes que hacer cd ruta_donde_se_encuentra_el_codigo_Python

          luego hacer un dir

          verás si en la lista que se muestra aparece el archivo LES_ENSEMBLES.py

          (¿por qué un nombre de archivo en mayúsculas, por cierto?)

          0
          1. El archivo LES_ENSEMBLES.py está en la carpeta

            ¡En mayúsculas, es para poder localizarlo fácilmente!

            0
          2. Moderador
            @quentin2121

            En ese momento hay que escribirlo como se debe (respetando las minúsculas y mayúsculas). Seguimos esperando que nos copies y pegues el resultado del comando dir (en el directorio adecuado) para ver qué falla. Una cosa que probablemente puedas hacer es utilizar PowerShell en lugar de los comandos de MS-DOS. Al igual que un terminal en Linux, admite la autocompletación, es decir, que al usar la tecla "tabulación", completa los nombres de carpetas/archivos.

            0
          3. @quentin2121

            ¡Eres un cómico muy gracioso! ¡Abre los ojos!

            Yo veo un archivo

            LES_ ENSEMBLES.py

            y no

            LES_ENSEMBLES.py

            y en el explorador de Windows, ¿no te saltaba a los ojos?

            Y quita un poco de todos esos archivos .spec inútiles

            Y adquiere también un buen hábito:

            usar guiones bajos ( _ ) en lugar de espacios en los nombres de archivos:

            crear_un_pdf.py

            2
          4. Moderador
            @Phil_1857

            ¿Finalmente lograste ejecutar el comando pyinstaller?

            0
        2. Colaborador

          Quentin no parece estar familiarizado con la línea de comandos.

          Para resumir y aclarar para Quentin, en esta publicación de Quentin:

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

          Podemos ver que:

           cd C:\Users\quent\PycharmProjects\pythonProject

          funciona y permite que Quentin se mueva a "C:\Users\quent\PycharmProjects\pythonProject".

          Y que:

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

          efectivamente lanza pyinstaller que debe estar en el directorio "C:\Users\quent\PycharmProjects\pythonProject4\venv\Scripts\pyinstaller", pero su ejecución falla con un error:

           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

          La ejecución del programa pyinstaller falla porque el directorio "C:\Users\quent\PycharmProjects\pythonProject\" no contiene un archivo "LES_ENSEMBLES.py".

          Partiendo de la hipótesis de que "C:\Users\quent\PycharmProjects\pythonProject\" contiene "LES_ ENSEMBLES.py" (con un espacio después del guion bajo) y no "LES_ ENSEMBLES.py", la secuencia correcta de comandos, después de abrir la línea de comandos sería:

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

          Si Quentin ha renombrado su archivo "LES_ ENSEMBLES.py" a "LES_ ENSEMBLES.py", sin espacio, como se aconseja, la secuencia correcta de comandos, después de abrir la línea de comandos sería:

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

          puedes pegar texto en la línea de comandos (clic derecho - pegar). Hazlo para evitar errores de escritura.

          0
          1. Gracias, ¡eso funcionó, POR FIN!

            ¿Es la carpeta donde está LES_ENSEMBLES.py la que hay que copiar para ejecutarlo en un ordenador donde no hay python instalado?

            He verificado, LES_ENSEMBLES está en .py, ¿no se ha convertido en .exe?

            0
          2. @quentin2121

            Mira nuestras respuestas más arriba

            ¡Ya te lo hemos explicado!

            En la carpeta que contiene el .py, hay una carpeta que contiene otra carpeta

            que contiene el .exe

            Revisa nuestras respuestas y sabrás qué hacer

            0
          3. Colaborador
            @quentin2121

            Como hay 87 respuestas, también se puede consultar la documentación:

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

            PyInstaller analiza myscript.py y:

            • Escribe myscript.spec en la misma carpeta que el script.
            • Crea una carpeta build en la misma carpeta que el script si no existe.
            • Escribe algunos archivos de registro y archivos de trabajo en la carpeta build.
            • Crea una carpeta dist en la misma carpeta que el script si no existe.
            • Escribe la carpeta ejecutable myscript en la carpeta dist.
            En la carpeta dist encuentras la aplicación empaquetada que distribuyes a tus usuarios.
            1