jueves, 17 de noviembre de 2011

Cómo hacer un ejecutable de Python

En esta entrada quiero explicar cómo hacer un archivo de python ejecutable. Yo lo necesité para poder hacer un archivo ejecutable de mi videjuego "Juego Medieval" para que mis amigos que no tienen Python instalado en sus computadoras lo puedan jugar.

Nota: Tenemos que tener instalado Python 2.5 ya que este maneja muy bien la librería "pygame" (se muestran algunos problemas si utilizamos la versión de Python 2.7) también debemos tener instalado "pygame", "py2exe" y "pygame2exe" el respectivo para la versión Python 2.5

Paso 1: Necesitamos añadir Python a nuestro PATH. Lo primero que haremos es ir a Inicio, y en donde dice "Equipo" damos clic derecho y seleccionamos "Propiedades"


Paso 2: Ya que estamos en las propiedades nos vamos a "Configuración avanzada del sistema"

Paso 3: Después de haber dado clic en "Configuración avanzada del sistema" y nos aparece una ventana como esta, y damos clic en "Variables de entorno"

Paso 4: Estando ya en "variables de entorno" nos aparece una ventana como la siguiente:


Paso 5: En la parte de abajo, que dice: "Variables del sistema" buscamos una variable llamda "Path" le damos clic.


Paso 6: Una vez seleccionada damos clic en el botón que aparece abajo "Editar" y escribimos lo que está selesccionado en azul en la pantalla siguiente:  ;C:\Python25;C:\Python25\Scripts (con todo y el ; ya que este separa de otras instrucciones que ya están ahí)


Paso 7: Damos clic en aceptar y ahora nos vamos al CMD y tecleamos "Python" y debe darnos estas instrucciones indicando que lo que hicimos estuvo bien


Paso 8: Ya que todo está bien, crearemos una carpeta llamda "mycode" en C:






Paso 9: Ya que tenemos nuestra carpeta creada, abrimos el IDLE de Python y abrimos una nueva ventana.


Paso 10: Escribimos en nuestro programa lo siguiente:

print "Hello py2exe" 
raw_input("Close Window to Finish")

y lo llamaremos "hello.py" y lo guardamos en la carpeta que acabamos de crear "mycode" en C:


Paso 11: Ahora abrimos otra ventana del IDLE y escribimos un programa que lo llamaremos "setup.py" con el siguiente código

from distutils.core import setup 
import py2exe
setup( 
        console = [{"script":"hello.py"}] 
)


 Paso 12:  Guardamos el programa también en la carpeta "mycode" y nos vamos al cmd y tecleamos esto: CD C:\mycode para poder cambiarnos al directorio "mycode"




Paso 13: Tecleamos en el cdm "python setup.py py2exe" y veremos que nos despliega el archivo hello.py que himos al comienzo.


Después de esto checamos en nuestra carpeta "mycode" que se generaron 2 nuevas carpetas, una de ellas es la que nos importa, llamda "dist" y esta contiene nuestro archivo ejecutable "hello" 


En mi caso para el videojuego que hice, modificaré el archivo de "setup.py" poniéndole esto: 


from distutils.core import setup
import py2exe
setup(
    windows = [{"script":"juego4.py"}],
    data_files = [(".", ["monito1.png", "monitopierde.png", "escenario.png"])]
    )



Yo le puse "juego4.py" porque es el nombre de mi archivo que quiero hacer ejecutable, y en "data_files" van los archivos que ocupa el programa, en mi caso son 3 imágenes.








Hacemos el mismo procedimiento que hicimos anteriormente con el setup.py de hello.py en el cmd. 


Descargamos la plantilla de pygame2exe en pygame.org http://pygame.org/wiki/Pygame2exe y la copiamos en una ventana del IDLE de Python y lo guardamos en la misma carpeta que tengamos nuestro juego, en mi caso lo pondré en la carpeta de "mycode"


Como podemos ver en la imagen hay que modificar algunas cosas de la clase "Build" lo demás no hay que tocarlo porque si no ya no funcionará nuestro ejecutable. Como pueden ver donde dice self.project_name va el nombre que tú quieres para el proyecto, en mi caso le puse "Juego Medieval"


En self.script va el nombre de nuestro archivo que queremos hacer ejecutable, en mi caso es juego4.py


En self.project_url podemos poner el url de nuestra página web, en mi caso puse el de mi blog.


En self.project_version escribimos la versión de nuestro juego, en mi caso lo dejé sin modificar

En self.extra_datas van entre comillas y separadas por comas nuestras imágenes o archivos de audio que utilizamos en nuestro programa o también podemos poner el nombre de la carpeta, aunque no lo recomiendo ya que tuve problemas para que la detectara como carpeta, así que es mejor si ponemos cada archivo individualmente. *Es importante que los archivos estén en la misma carpeta que el código del juego y que la plantilla que estamos haciendo*


En self.extra_modules escribimos las librerías que importamos al inicio de nuestro programa, en mi caso sólo utilicé la de "random"


Después guardamos nuestro código en la misma carpeta donde están las imágenes y el código del juego. En seguida nos vamos al cmd y tecleamos: 


python mygame2exe.py py2exe


Y nos empezará a llenar la pantalla de instrucciones hasta que nos pide que oprimamos una tecla y ya estará nuestro archivo ejecutable en la carpeta que se generó llamda "dist


Recordemos que para poder pasarla a nuestros amigos que quieran el juego debemos pasar toda la carpeta de "dist" ya que si pasamos sólo el ejecutable nos dirá que no encuetra las imágenes solicitadas por el programa.


Fuentes: http://www.daniweb.com/software-development/python/threads/194102
http://www.netveloper.com/2009/11/anadir-ruta-al-path-de-windows-7/



7 comentarios:

  1. Buena explicacion, gracias.
    Tengo una duda y, si te apetece y puedes, agradeceria que le echaras un vistazo.
    El tema es el siguiente:
    Yo no tengo ni idea de programar, pero hace tres o cuatro semanas me encontre con un tutorial de python y pythong.
    El caso es que, por aquello de probar cosas nuevas, me puse a escribir codigo y consegui hacer un programita simple que resuelve ecuaciones de primer y segundo grado.
    Con el MODULEPYTHONG consegui que graficara la ecuacion de segundo grado, todo un logro para un torpe como yo. Pero al intentar hacer el ejecutable para que se pueda usar en windows, me encuentro con que no hay manera que funcione.
    Tengo el py2exe y, probando con otro programita que hice, que solo funciona en consola, me tira bien. Yo creo que no lo se configurar para que haga un ejecutable con ventana grafica.
    He probado importando el modulepython en el archivo setup.py y tambien colocandolo en el apartado data_files, pero me ha dicho que nanay.
    Te agradeceria alguna indicacion (si es posible en plan "python para tontos".
    Gracias

    ResponderEliminar
  2. Gracias por la explicación, pero tengo una duda.
    Estoy trabajando en ubuntu, y deseo hacer un ejecutable para windows. O por lo menos hacer un instalador para windows desde python. Como se hace?

    ResponderEliminar
  3. Me sirvió bastante Gracias ^.^

    ResponderEliminar
  4. Interesante explicación Daniela, te queria preguntar para ubuntu segun tengo entendido el uso de python es el mismo, y no tube oportunidad de preguntarte en la semana sobre lo de prorama que estaba creando... Alguna sugrencia para poder reproducir sonido usando el pyton??

    Angel Carmona

    ResponderEliminar
    Respuestas
    1. Hola, Angel. Pygame tiene la funcionalidad de poder reproducir audio, en lo personal yo no lo involucré en mi videojuego porque no escuchaba la pista que le había agregado, pero seguramente fueron detalles que no me tomé el tiempo de arreglar. De todos modos aquí te dejo un link que encontré sobre pyaudio.

      http://www.leobravo.cl/?p=1337

      Espero les pueda servir en su proyecto :)

      Eliminar
  5. hola hola daniela, oye tengo un programa que imprime texto en consola pero tambien tiene una ventana grafica con imagenes, y mi pregunta es como hago el ejecutable de eso?

    porque siguiendo los pasos que mencionas aqui se crea el ejecutable pero no sale la pantalla negra, solo la ventana grafica con las imagenes, espero me puedas ayudar esque soy nuevo en esto u.u

    ResponderEliminar
    Respuestas
    1. ya supe como xP se debe cambiar al archivo setup en la parte de window por consola:

      from distutils.core import setup
      import py2exe
      setup(
      console = [{"script":"nombre.py"}],
      data_files = [(".", ["archivos..."])]
      )

      y al hacer el ejecutable del .py se crean dos carpetas una de build y otra de dist que contiene el ejecutable donde se abre la pantalla negra y la ventana grafica

      Pero si le aplicamos a ese ejecutable ya creado la plantilla de py2exe entonces se genera una nueva carpeta dist con el puro ejecutable y las imagenes que usa la aplicacion pero ya no sale la pantalla negra

      Eso me genera una nueva pregunta, ¿Se podria generar un ejecutable utilizando la plantilla y que salga la pantalla negra? supongo que se le debe modificar algo al archivo.py que contiene la plantilla no?

      Eliminar