No se puede hacer una araña de chatarra binaria independiente con cx_Freeze

Una breve descripción de mi entorno de trabajo: win 7 x64, python 2.7 x64, scrapy 0.22, cx_Freeze 4.3.2.

Primero, desarrollé una araña de rastreo simple y funciona bien. Luego, utilizando la API principal de scrapy, creé un script externo main.py, que puede ejecutar spider, y también funciona según sea necesario. Aquí está el código del script:

# external main.py using scrapy core API, 'test' is just replaced name of my project from twisted.internet import reactor from scrapy.crawler import Crawler from scrapy import log, signals from test.spiders.testSpider import TestSpider from test import settings, pipelines from scrapy.utils.project import get_project_settings spider = TestSpider(domain='test.com') settings = get_project_settings() crawler = Crawler(settings) crawler.signals.connect(reactor.stop, signal=signals.spider_closed) crawler.configure() crawler.crawl(spider) crawler.start() log.start() reactor.run() 

Así que ahora estoy tratando de hacer binario para todo esto con cx_Freeze usando setup.py como en otro tema aquí . Aquí está el código:

 from cx_Freeze import setup, Executable includes = ['scrapy', 'pkg_resources', 'lxml.etree', 'lxml._elementpath'] build_options = {'compressed' : True, 'optimize' : 2, 'namespace_packages' : ['zope', 'scrapy', 'pkg_resources'], 'includes' : includes, 'excludes' : []} executable = Executable(script='main.py', copyDependentFiles=True, includes=includes) setup(name='Stand-alone scraper', version='0.1', description='Stand-alone scraper', options= {'build_exe': build_options}, executables=[executable]) 

Normalmente se comstack en el archivo exe. Los problemas comienzan cuando bash ejecutarlo:

 Traceback (most recent call last): File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in  exec code in m.__dict__ File "main.py", line 2, in  from scrapy.crawler import Crawler File "C:\Python27\lib\site-packages\scrapy\__init__.py", line 6, in  __version__ = pkgutil.get_data(__package__, 'VERSION').strip() File "C:\Python27\lib\pkgutil.py", line 591, in get_data return loader.get_data(resource_name) IOError: [Errno 2] No such file or directory: 'scrapy\\VERSION' 

Resolví este problema simplemente moviendo el archivo scrapy \ version de la fuente original (python \ lib \ site-packages \ scrapy) a library.zip \ scapy en la carpeta de comstackción. Después de la segunda ejecución de main.exe recibí otro mensaje:

 Traceback (most recent call last): File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in  exec code in m.__dict__ File "main.py", line 11, in  crawler = Crawler(settings) File "C:\Python27\lib\site-packages\scrapy\crawler.py", line 20, in __init__ self.stats = load_object(settings['STATS_CLASS'])(self) File "C:\Python27\lib\site-packages\scrapy\utils\misc.py", line 42, in load_object raise ImportError("Error loading object '%s': %s" % (path, e)) ImportError: Error loading object 'scrapy.statscol.MemoryStatsCollector': No module named statscol 

No encontré ninguna solución a esto, y solo trato de importar el módulo del mensaje de error en mi main.py. En pocas palabras, no funcionó. Cada nueva importación recibí un nuevo mensaje con otro módulo (intenté importar 15 :)) hasta que obtuve un error sobre el módulo aes en la criptografía. También intenté usar las alternativas de cx_freeze como py2exe y pyinstaller, pero con el mismo resultado.

¿Alguien puede ayudarme a resolver este problema? Gracias por leer hasta este punto.

Reemplace su código cx_Freeze con esto.

 import sys from cx_Freeze import setup, Executable build_exe_options = {"packages": ["os","twisted","scrapy","test"], "excludes": ["tkinter"],"include_msvcr":True} base = None setup( name = "MyScript", version = "0.1", description = "Demo", options = {"build_exe": build_exe_options}, executables = [Executable("C:\\MyScript", base=base)]) 

La diferencia en el código es que he incluido la totalidad de los paquetes para que pueda acceder a todas las funciones desde ellos.