2012-04-18 11 views
5

Estoy tratando de usar cx-freeze para crear una distribución autónoma estática de mi aplicación (The Spye Python Engine, www.spye.dk), sin embargo, cuando ejecuto cx-freeze , que dice:cx-freeze no incluye módulos incluso cuando se incluye específicamente

Missing modules: 
? _md5 imported from hashlib 
? _scproxy imported from urllib 
? _sha imported from hashlib 
? _sha256 imported from hashlib 
? _sha512 imported from hashlib 
? _subprocess imported from subprocess 
? configparser imported from apport.fileutils 
? usercustomize imported from site 

Ésta es mi setup.py:

#!/usr/bin/env python 
from cx_Freeze import setup, Executable 

includes = ["hashlib", "urllib", "subprocess", "fileutils", "site"] 
includes += ["BaseHTTPServer", "cgi", "cgitb", "fcntl", "getopt", "httplib", "inspect", "json", "math", "operator", "os", "os,", "psycopg2", "re", "smtplib", "socket", "SocketServer", "spye", "spye.config", "spye.config.file", "spye.config.merge", "spye.config.section", "spye.editor", "spye.framework", "spye.frontend", "spye.frontend.cgi", "spye.frontend.http", "spye.input", "spye.output", "spye.output.console", "spye.output.stdout", "spye.pluginsystem", "spye.presentation", "spye.util.html", "spye.util.rpc", "ssl", "stat,", "struct", "subprocess", "sys", "termios", "time", "traceback", "tty", "urllib2", "urlparse", "uuid"] 

includefiles=[] 
excludes = [] 
packages = [] 
target = Executable(
    # what to build 
    script = "spye-exe", 
    initScript = None, 
    #base = 'Win32GUI', 
    targetDir = r"dist", 
    targetName = "spye.exe", 
    compress = True, 
    copyDependentFiles = True, 
    appendScriptToExe = False, 
    appendScriptToLibrary = False, 
    icon = None 
    ) 

setup(
    version = "0.1", 
    description = "No Description", 
    author = "No Author", 
    name = "cx_Freeze Sample File", 

    options = {"build_exe": {"includes": includes, 
       "excludes": excludes, 
       "packages": packages 
       #"path": path 
       } 
      }, 

    executables = [target] 
    ) 

Tenga en cuenta que yo indique claramente los módulos que faltan en la lista incluye.

¿Cómo puedo solucionar esto?

Respuesta

-1

Supongo que no se puede simplemente += en las listas.

Probablemente debería utilizar el método de la lista extend - de lo contrario la lista original no se modificará:

includes.extend(["BaseHTTPServer", "<rest of your modules>"]) 

EDIT: (Gracias @ThomasK)

+= funciona bien - que sólo tenía una intérprete en línea de Python que no funcionó correctamente. (No tengo ninguna instalación de Python en mi instalación de Windows, así que tuve que verificar en línea).

+0

Bien, ahora lo he solucionado, pero sigo teniendo la misma lista de módulos faltantes. ¿Como arreglar? – ervingsb

+0

Tengo la actualización de mi setup.py aquí: http://paste.adora.dk/P2357.txt, y la salida de "python setup.py build | grep -A12 Missing" está aquí: http: //paste.adora .dk/P2356.txt – ervingsb

+0

Acabo de buscar en Google su problema y parece correlacionarse con [libcrypto] (http://www.mail-archive.com/[email protected]/msg00664.html) (sin embargo no hubo solución) - ¿tal vez cx_freeze no maneja dependencias que no sean de Python? – BergmannF

0

Los módulos faltantes no son necesariamente un problema: muchos módulos prueban diferentes importaciones para adaptarse a diferentes plataformas o diferentes versiones de Python. En subprocess, por ejemplo, se puede encontrar este código:

if mswindows: 
    ... 
    import _subprocess 

cx_Freeze no sabe nada de esto, por lo que tratará de encontrar _subprocess en Linux/Mac, así, y la reporta como desaparecido. Especificarlos en includes no cambia nada, porque está tratando de incluirlos, pero no puede encontrarlos.

De todos modos, debería compilar un archivo, así que intente ejecutarlo y ver si funciona.