cx_freeze no puede crear exe con la librería pandas

Tener problemas para crear exe utilizando cx_freeze con una biblioteca de Pandas. He visto a muchos otros tener problemas con el numPy pero pude ingresar satisfactoriamente el numPy. Mi gran punto de dolor ha sido Pandas. ¿Hay algo en Pandas que pueda estar causando fallas?

Archivo de configuración

from cx_Freeze import setup, Executable build_exe_options = { "includes": ['numpy', 'pandas'], "packages": [], 'excludes' : [], "include_files": []} setup( name = "appName", version = "0.1", description = "", author = "Dengar", options = {"build_exe": build_exe_options}, executables = [Executable("appName.py")] ) 

Fragmento de código que muestra lo que estoy haciendo.

 import pyodbc import numpy as np import pandas.io.sql as psql from pandas import DataFrame, Series, date_range import datetime print("Hello World") 

Aquí está el registro de errores que recibo

 > Stamped: build\exe.win-amd64-2.7\appName.exe Traceback (most recent > call last): File "setup.py", line 17, in  > executables = [Executable("pyodbc.py")] File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\site-packages\cx_Freeze\dist.py", > line 365, in setup > distutils.core.setup(**attrs) File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\distutils\core.py", > line 152, in setup > dist.run_commands() File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\distutils\dist.py", > line 953, in run_commands > self.run_command(cmd) File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\distutils\dist.py", > line 972, in run_command > cmd_obj.run() File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\distutils\command\build.py", > line 127, in run > self.run_command(cmd_name) File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\distutils\cmd.py", > line 326, in run_command > self.distribution.run_command(command) File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\distutils\dist.py", > line 972, in run_command > cmd_obj.run() File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\site-packages\cx_Freeze\dist.py", > line 235, in run > freezer.Freeze() File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\site-packages\cx_Freeze\freezer.py", > line 582, in Freeze > self.compress, self.copyDependentFiles) File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\site-packages\cx_Freeze\freezer.py", > line 492, in _WriteModules > module.Create(finder) File "C:\Users\Dengar\AppData\Local\Continuum\Anaconda\lib\site-packages\cx_Freeze\freezer.py", > line 714, in Create > module.file, module.name) cx_Freeze.freezer.ConfigError: no file named sys (for module boto.compat.sys) 

Si elimino Pandas de mi archivo de instalación y fragmento de código y dejo Numpy, tengo un ejecutable funcional. ¿Alguien se topa con este problema? El archivo exe se crea pero ninguno de los archivos de soporte se agrega al directorio de comstackción. Al abrir el exe, el progtwig se bloquea de inmediato.

Estoy ejecutando python27 64 bit en anaconda windows 8 machine.

Agrega lo siguiente a tus build_exe_options:

 'build_exe': { 'excludes': ['boto.compat.sys', 'boto.compat._sre', 'boto.compat._json', 'boto.compat._locale', 'boto.compat._struct', 'boto.compat.array'], } 

Miré boto / compat.py y no vi que se importara un módulo sys. Al excluir la lista de módulos anterior, aún se incluye boto / compat.py.

Después de excluir ‘boto.compat.sys’ y ‘boto.compat._sre’, obtuve el siguiente error:

 Traceback (most recent call last): File "setup.py", line 31, in  executables=executables File "/Users/king/virtual_envs/py27/lib/python2.7/site-packages/cx_Freeze/dist.py", line 362, in setup distutils.core.setup(**attrs) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 151, in setup dist.run_commands() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands self.run_command(cmd) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command cmd_obj.run() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build.py", line 127, in run self.run_command(cmd_name) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command self.distribution.run_command(command) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command cmd_obj.run() File "/Users/king/virtual_envs/py27/lib/python2.7/site-packages/cx_Freeze/dist.py", line 232, in run freezer.Freeze() File "/Users/king/virtual_envs/py27/lib/python2.7/site-packages/cx_Freeze/freezer.py", line 610, in Freeze self.compress, self.copyDependentFiles) File "/Users/king/virtual_envs/py27/lib/python2.7/site-packages/cx_Freeze/freezer.py", line 586, in _WriteModules path = os.pathsep.join([origPath] + module.parent.path) TypeError: can only concatenate list (not "NoneType") to list 

Corrí ipython y luego ipython :

 In [1]: pdb Automatic pdb calling has been turned ON In [2]: run setup.py build 

Para obtener acceso al module desde module.parent.path :

 ipdb> module  

NOTA: _json.so es el módulo json incorporado. Esto significa que ponerlo en la inclusión debe incluirlo específicamente. No lo hice ya que otros paquetes hicieron que cx_freeze lo recogiera automáticamente. Excluyendo ‘boto.compat._json’ hizo el truco.

Repetí esto hasta que construí todo. Confirmé que todos los módulos base fueron seleccionados por cx_freeze (_sre, _json, _locale, _struct, array), así que no tuve que agregarlos manualmente a los incluidos.

Por lo tanto, su script actualizado se verá como:

 from cx_Freeze import setup, Executable build_exe_options = { "includes": ['numpy', 'pandas'], "packages": [], 'excludes' : ['boto.compat.sys', 'boto.compat._sre', 'boto.compat._json', 'boto.compat._locale', 'boto.compat._struct', 'boto.compat.array'], "include_files": []} setup( name = "appName", version = "0.1", description = "", author = "Dengar", options = {"build_exe": build_exe_options}, executables = [Executable("appName.py")] ) 

Lo siguiente debería ayudarlo a superar este problema (y puede llevarlo al siguiente de dependencias faltantes;))

Al verificar el código de freeze.py, hay un caso que no está marcado, así que hice los siguientes cambios en freezer.py:

línea 600, desde

  try: if module.parent is not None: path = os.pathsep.join([origPath] + module.parent.path) os.environ["PATH"] = path self._CopyFile(module.file, target, copyDependentFiles) finally: os.environ["PATH"] = origPath 

a:

  try: if module.parent is not None: if module.parent.path is not None: path = os.pathsep.join([origPath] + module.parent.path) os.environ["PATH"] = path self._CopyFile(module.file, target, copyDependentFiles) else: path = os.pathsep.join([origPath, os.path.dirname(module.parent.file)]) os.environ["PATH"] = path print '========================================================' finally: os.environ["PATH"] = origPath