cx-freeze no incluye módulos incluso cuando se incluyen específicamente

Estoy tratando de usar cx-freeze para crear una distribución estática autocontenida de mi aplicación (The Spye Python Engine, www.spye.dk ), sin embargo, cuando ejecuto cx-freeze, dice:

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 

Este 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 especifico claramente los módulos faltantes en la lista de inclusión.

¿Cómo puedo solucionar esto?

    Los módulos que faltan no son necesariamente un problema: muchos módulos intentan diferentes importaciones para adaptarse a diferentes plataformas o diferentes versiones de Python. En el subprocess , por ejemplo, puedes encontrar este código:

     if mswindows: ... import _subprocess 

    cx_Freeze no sabe acerca de esto, por lo que tratará de encontrar _subprocess en Linux / Mac también, e informará que falta. Especificarlos en no includes cambios, porque intenta incluirlos, pero no puede encontrarlos.

    Debería construir un archivo de todos modos, así que intenta ejecutarlo y ver si funciona.

    Supongo que no puedes simplemente += en las listas.

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

     includes.extend(["BaseHTTPServer", ""]) 

    EDITAR: (Gracias @ThomasK)

    += funciona bien: solo tenía un intérprete de Python en línea que no funcionaba correctamente. (No tengo ninguna instalación de Python en mi instalación de Windows, así que tuve que verificar en línea).