Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Tuplado en 1 Agosto 2013, 20:30 pm



Título: Convertir .py en .exe en Python
Publicado por: Tuplado en 1 Agosto 2013, 20:30 pm
Hola a todos/as

He terminado un juego en Python y ahora quiero convertirlo en .exe para correrlo en otros SS.OO (Windows, Linux, Mac...)

Utilice py2exe y realice todo el proceso que hay que hacer hasta crear la carpeta dist, pero cuando abro la carpeta y ejecuto el .exe, me sale un flash rapidísimo con una pantalla negra.

Lo que he utilizado
python 2.3 (Programa de Python)
pythong (IDE donde cree el juego)
py2exe (Convertidor a exe)

Alguien que sepa, me podría decir cual es el motivo por el cual no se me ejecuta el .exe

Ahh: y ya utilice el raw_input al final de las lineas del programa y no se ejecuta tampoco.

Un saludo y agradezco la ayuda


Título: Re: Convertir .py en .exe en Python
Publicado por: Eleкtro en 1 Agosto 2013, 20:44 pm
Alguien que sepa, me podría decir cual es el motivo por el cual no se me ejecuta el .exe

Pues hombre, teniendo en cuenta que py2exe es una utilidad obsoleta ya que la última actualización del programa es del año 2008... segúramente sea un problema de compatibilidad, y más si estás usando py 3.X, no eres el único que tiene problemas con py2exe ni serás el último...

...Por eso te digo lo mismo que le he dicho a todo el mundo respecto a compilar en Python, olvida esa mierd@ de py2exe y prueba a utilizar -> cx-freeze (http://cx-freeze.sourceforge.net) <-

Cuéntanos si te funcionó :),
un saludo!


Título: Re: Convertir .py en .exe en Python
Publicado por: Tuplado en 1 Agosto 2013, 20:53 pm
hola EleKtro H@cker

Vale lo voy a descargar, pero sera compatible con Python 2.3, porque aquí la versión más vieja es 2.6, y no se si habrá problemas de compatibilidad.

Como sería el proceso con este programa para hacerlo .exe, si no es mucha molestia me podrías decir o remitirme a alguna pagina que me lo expliquen.

Gracias


Título: Re: Convertir .py en .exe en Python
Publicado por: Eleкtro en 1 Agosto 2013, 20:57 pm
pero sera compatible con Python 2.3

No puedo asegurartelo, solo lo he probado con py 2.7 y 3

En la misma página que te pasé tienes la documentación: http://cx-freeze.readthedocs.org/en/latest/script.html#script

Citar
Código:
cxfreeze hello.py --target-dir dist

Citar
Código:
--include-modules=NAMES

    comma separated list of modules to include


Título: Re: Convertir .py en .exe en Python
Publicado por: Tuplado en 1 Agosto 2013, 21:04 pm
Gracias EleKtro H@cker, voy a probar con lo que me has facilitado.

Un saludo


Título: Re: Convertir .py en .exe en Python
Publicado por: 0x5d en 1 Agosto 2013, 22:16 pm
I use Py2Exe


Título: Re: Convertir .py en .exe en Python
Publicado por: GingerCat en 1 Agosto 2013, 22:32 pm
Citar
ahora quiero convertirlo en .exe para correrlo en otros SS.OO (Windows, Linux, Mac...)

Python sí es multiplataforma ya que Linux y Mac lo suelen traer instalado por defecto, en cambio los .exe solo los puedes ejecutar en un emulador en los otros S.O. y esto suele dar problemas.
Ten eso en cuenta si quieres usar el juego en otros sistemas operativos.
Un saludo.


Título: Re: Convertir .py en .exe en Python
Publicado por: Tuplado en 5 Agosto 2013, 17:55 pm
Hola EleKtro H@cker y GingerCat:

Mira hice lo que me dijistes, pero lo compile con cx_Free, parecido a py2exe

Me crea el .exe con windows en una carpeta llamada build

pero cuando abro el ejecutable desde la consola me lanza este fallo:

File "C:\Python26\Lib\site-packages\cx_Freeze\initscripts\Console.py" , line 27
, in <module>
exec code in m.__dict__

File "menu_libro_blanco.py", line 9, in <module>
File "C:\Python26\modulepythong.py", line 844, in <module>
   f=open(filename, "r")
IOError: [Errno 2] No such file or directory: "C:\\Python26\\build\\exe.win32-2.6
\\menu_libro_blanco"

Te facilito los 2 archivos el juego y el setup.py

JUEGO (menu_libro_blanco)

Código:
# MENU JUEGO
# ==========

# Importamos libreria de tiempo
import time
# Importamos todas las funciones del modulo (modulepythong)
from modulepythong import *
# Importamos todo el modulo random
import random

window_coordinates(0, 0, 400, 400) # GENERAMOS RESOLUCION
window_style("The Spaceship Game","black","TODO") # FONDO DE COLOR BLANCO

#-----------------------------------------------------------------------#

create_text(200,350,"The Spaceship Game",13.5,"CENTER","blue")
create_text(200,300,"_Easy level (E)",10,"CENTER")
create_text(200,250,"_Medium level (M)",10,"CENTER")
create_text(200,200,"_Hard level (H)",10,"CENTER")
create_text(200,150,"_Exit(X)",10,"CENTER")
 
#-----------------------NIVELES DE JUEGO--------------------------#
a = str("j")
while a != "x":
  window_style('The Spaceship Game','black','TODO') # FONDO DE COLOR BLANCO
  create_text(200,350,"The Spaceship Game",13.5,"CENTER","blue")
  create_text(200,300,"_Easy level (E)",10,"CENTER","white")
  create_text(200,250,"_Medium level (M)",10,"CENTER","white")
  create_text(200,200,"_Hard level (H)",10,"CENTER","white")
  create_text(200,150,"_Exit(X)",10,"CENTER","white")
 
  #--NIVEL FACIL--#
  if keypressed(2) == str("e"):
    print "Nivel facil"
    import time
    from modulepythong import *
    from math import sin, cos, pi
    window_style('The Spaceship Game','white','TODO') # FONDO DE COLOR BLANCO

    # Paisaje
    altura_paisaje = 400
    anchura_paisaje = 400
    window_coordinates(0, 0, anchura_paisaje, altura_paisaje)

    # Gravedad
    g = 0.00001

    # Nave
    tamanyo_nave = 10
    x = anchura_paisaje / 2
    y = altura_paisaje - 100
    vy = 0
    impulso_y = 2*g
    impulso_x = 0.00001
    vx = 0
    nave = create_filled_rectangle(x, y, x+tamanyo_nave, y+tamanyo_nave, 'blue')

    # Plataforma
    px = anchura_paisaje / 2
    py = 0
    vpx = .05
    anchura_plataforma = 40
    altura_plataforma = 3
    plataforma = create_rectangle(px, py,px+anchura_plataforma, py+altura_plataforma, 'red')

    # Tanque de combustible
    color = "green" # combustible lleno
    fuel = 1000
    consumo = 0.1
    rect_inicio = create_rectangle(0,altura_paisaje, 10, altura_paisaje-100, 'black')
    lleno = create_filled_rectangle(1,altura_paisaje, 9, altura_paisaje-fuel/10, color)
    create_text(25, altura_paisaje-8, '0%', 10, 'W')
    create_text(30, altura_paisaje-95, '100%', 10, 'W')

    # Dial de velocidad
    circulo = create_circle(anchura_paisaje-50, altura_paisaje-50, 50, 'black')
    for i in range(0, 360, 10):
      create_line(anchura_paisaje-50 + 40 * sin(i*pi/180), \
      altura_paisaje-50 + 40 * cos(i*pi/180), \
      anchura_paisaje-50 + 50 * sin(i*pi/180), \
      altura_paisaje-50 + 50 * cos(i*pi/180),)
      if i % 30 == 0:
        create_text(anchura_paisaje-50 + 30 * sin(i*pi/180), \
        altura_paisaje-50 + 30 * cos(i*pi/180), str(i), 5, 'CENTER')

        aguja = create_line(anchura_paisaje-50, altura_paisaje-50, \
        anchura_paisaje-50 + 50 * sin(0*pi/180), \
        altura_paisaje-50 + 50 * cos(0*pi/180),"black")

    facil = create_text(200,200,"Level Easy",12,"CENTER","blue")
    time.sleep(2)
    erase(facil)   
    # Simulacion
    while y > 0 and y < altura_paisaje and x > 0 and x < anchura_paisaje - tamanyo_nave:
      vy -= g
      if keypressed(1) == 'Up' and fuel > 0:
        vy += impulso_y
        fuel -= consumo
        if fuel < 350:
          color = "red" # combustible vaciandose
   
      elif keypressed(1) == 'Left' and fuel > 0:
        vx -= impulso_x
        fuel -= consumo
        if fuel < 350:
          color = "red" # combustible vaciandose
   
      elif keypressed(1) == 'Right' and fuel > 0:
        vx += impulso_x
        fuel -= consumo
        if fuel < 350:
          color = "red" # combustible vaciandose
     
      y += vy
      x += vx
      px += vpx
 
      if px <= 0 or px >= anchura_paisaje - anchura_plataforma:
        vpx = -vpx
      move(nave, vx, vy)
      move(plataforma, vpx, 0)

      viejo_lleno = lleno
      lleno = create_filled_rectangle(1,altura_paisaje, 9, altura_paisaje-fuel/10, color)
      erase(viejo_lleno)
      vieja_aguja = aguja
      aguja = create_line(anchura_paisaje-50, altura_paisaje-50, \
      anchura_paisaje-50 + 50 * sin(1000*vy*pi/180), \
      altura_paisaje-50 + 50 * cos(1000*vy*pi/180), 'black')
      erase(vieja_aguja)

    msg_x = anchura_paisaje/2
    msg_y1 = altura_paisaje/2
    msg_y2 = altura_paisaje/3

    if y >= altura_paisaje:
      create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
      create_text(msg_x, msg_y2, 'Rumbo a las estrellas?', 12, 'CENTER')

    elif y <= 0 and vy < -0.1:
      create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
      create_text(msg_x, msg_y2, 'Te has estrellado.', 12, 'CENTER')

    elif y <= 0 and \
    abs((px+anchura_plataforma/2)-(x+tamanyo_nave/2)) >= anchura_plataforma/2:
      create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
      create_text(msg_x, msg_y2, ' !Que mala puntería!', 12, 'CENTER')

    elif x <= 0 or x >= anchura_paisaje - tamanyo_nave:
      create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
      create_text(msg_x, msg_y2, 'Chocaste con la pared.', 12, 'CENTER')

    else:
      create_text(msg_x, msg_y1, 'Ganaste', 24, 'CENTER')
      create_text(msg_x, msg_y2, ' !Enhorabuena, piloto!', 12, 'CENTER')

    time.sleep(4)
    erase(nave)
    erase(plataforma)
    erase(rect_inicio)
    erase(lleno)
#-----------------------------------------------------------------#
  elif keypressed(2) == str("m"):
    print "Nivel medio"
     
  elif keypressed(2) == str("h"):
    print "Nivel dificil"
   
#-----------------------------------------------------------------#
         
  elif keypressed(2) == str("x"):
    print "Saliendo..."
    a = keypressed(2)
   

  else:
    error = create_text(200,50,"Error! Press another key",11,"CENTER","red")
    time.sleep(2) # Espera 2 segundos y borra el objeto(mensaje)
    erase(error)

   
print"salistes"

Setup(setup.py)

Código:
from cx_Freeze import setup, Executable


setup(
    name = "" ,
    version = "0.1" ,
    description = "" ,
    executables = [Executable("menu_libro_blanco.py")]
    )


Bueno, te digo he utilizado la librería modulepythong para la creación, y ya he compilado otros programas sin librería y los compila bien.

Te facilito URL de pythong
http://www3.uji.es/~dllorens/downloads/pythong/windows/ (http://www3.uji.es/~dllorens/downloads/pythong/windows/)

Te agradezco tu ayuda.