2008-10-20 28 views
5

Escribí un script setup.py para py2exe, generé un ejecutable para mi aplicación python GUI y tengo un montón de archivos en el directorio dist, incluyendo la aplicación, w9xopen.exe y MSVCR71. dll. Cuando intento ejecutar la aplicación, aparece un mensaje de error que dice "ver el archivo de registro para más detalles". El único problema es que el archivo de registro está vacío.Solución de problemas del problema de empaquetado py2exe

El error más parecido que he visto es "Parece que faltan los siguientes módulos", pero no estoy utilizando ninguno de esos módulos por lo que sé (especialmente porque parecen ser de bases de datos que no estoy usando) pero descubrir en Google sugiere que estas son advertencias relativamente benignas.

He escrito y empaquetado una aplicación de consola, así como wxpython con py2exe y ambas aplicaciones se han compilado y ejecutado con éxito. Estoy usando un nuevo kit de herramientas de python llamado dabo, que a su vez hace uso de los módulos de wxpython, por lo que no puedo entender lo que estoy haciendo mal. ¿Dónde empiezo a investigar el problema ya que obviamente el archivo de registro no ha sido demasiado útil?

Editar 1: La versión de Python es 2.5. py2exe es 0.6.8. No hubo errores de compilación significativos. El único era el tema "Parece que faltan los siguientes módulos", que eran errores no críticos, ya que los paquetes enumerados eran los que definitivamente no estaba usando y tampoco deberían detener la ejecución de la aplicación. La ejecución del ejecutable produjo un archivo de registro que estaba completamente vacío. Anteriormente tenía un error sobre las configuraciones regionales que he reparado desde entonces, pero es evidente que algo está mal ya que el ejecutable no se estaba ejecutando. El archivo setup.py se basa bastante en el setup.py original generado al ejecutar su "asistente de aplicaciones" y en el ejemplo que Ed Leafe y otros publicaron. Sí, tengo un archivo de registro y no está imprimiendo nada para que lo use, y es por eso que estoy preguntando si hay alguna otra ruta de solución de problemas que he omitido, lo que me ayudará a descubrir qué está pasando.

Incluso he escrito una aplicación de prueba básica que simplemente produce una interfaz gráfica de usuario básica - un marco vacío con algunas opciones de menú predeterminadas. El código escrito solo tiene 3 líneas y el resto está en el kit de herramientas de terceros. Nuevamente, compilé en un exe (como lo hizo mi aplicación original) pero simplemente no funcionó. No hubo salida de error en el archivo de registro de tiempo de ejecución tampoco.

Editar 2: Resulta que el cambio de "windows" a "console" para la depuración inicial era perspicaz. ¡Ahora tengo una aplicación de prueba básica y estoy compilando la aplicación real!

La aplicación de prueba:

 
import dabo 
app = dabo.dApp() 
app.start() 

El setup.py para la aplicación de prueba:

 
import os 
import sys 
import glob 
from distutils.core import setup 
import py2exe 
import dabo.icons 
daboDir = os.path.split(dabo.__file__)[0] 

# Find the location of the dabo icons: 
iconDir = os.path.split(dabo.icons.__file__)[0] 
iconSubDirs = [] 
def getIconSubDir(arg, dirname, fnames): 
    if ".svn" not in dirname and dirname[-1] != "\\": 
     icons = glob.glob(os.path.join(dirname, "*.png")) 
     if icons: 
      subdir = (os.path.join("resources", dirname[len(arg)+1:]), icons) 
      iconSubDirs.append(subdir) 
os.path.walk(iconDir, getIconSubDir, iconDir) 

# locales: 
localeDir = "%s%slocale" % (daboDir, os.sep) 
locales = [] 
def getLocales(arg, dirname, fnames): 
    if ".svn" not in dirname and dirname[-1] != "\\": 
    mo_files = tuple(glob.glob(os.path.join(dirname, "*.mo"))) 
    if mo_files: 
     subdir = os.path.join("dabo.locale", dirname[len(arg)+1:]) 
     locales.append((subdir, mo_files)) 
os.path.walk(localeDir, getLocales, localeDir) 

data_files=[("resources", glob.glob(os.path.join(iconDir, "*.ico"))), 
     ("resources", glob.glob("resources/*"))] 
data_files.extend(iconSubDirs) 
data_files.extend(locales) 

setup(name="basicApp", 
     version='0.01', 
     description="Test Dabo Application", 
     options={"py2exe": { 
       "compressed": 1, "optimize": 2, "bundle_files": 1, 
       "excludes": ["Tkconstants","Tkinter","tcl", 
       "_imagingtk", "PIL._imagingtk", 
       "ImageTk", "PIL.ImageTk", "FixTk", "kinterbasdb", 
       "MySQLdb", 'Numeric', 'OpenGL.GL', 'OpenGL.GLUT', 
       'dbGadfly', 'email.Generator', 
       'email.Iterators', 'email.Utils', 'kinterbasdb', 
       'numarray', 'pymssql', 'pysqlite2', 'wx.BitmapFromImage'], 
       "includes": ["encodings", "locale", "wx.gizmos","wx.lib.calendar"]}}, 
     zipfile=None, 
     windows=[{'script':'basicApp.py'}], 
     data_files=data_files 
) 

Respuesta

1

Es posible que necesite para arreglar ingrese el manejo de primera, this URL puede ayudar.

Más adelante puede buscar la respuesta here.

Mi respuesta es muy general porque no proporcionó ninguna información más específica (como la versión py2exe/python, el registro py2exe, otras bibliotecas de terceros usadas).

+0

Gracias por el enlace ... me preguntaba acerca de esta parte: para anular el comportamiento predeterminado de py2exe, todo lo que tiene que hacer es redireccionar sys.stderr (y posiblemente sys.stdout) a algo de su creación. ¿Dónde realmente pongo esto ...? – TheObserver

1

Ver http://www.wxpython.org/docs/api/wx.App-class.html para wxPyton's App initializer de clase. Si desea ejecutar la aplicación desde una consola y hacer que stderr imprima allí, proporcione False para el argumento redirect.De lo contrario, si solo desea que aparezca una ventana, establezca redirect en True y filename en None.

Cuestiones relacionadas