1

在 Windows 32 位上安装所有 scrapy 的依赖项后。我试图从我的爬虫蜘蛛构建一个可执行文件。以“python runspider.py”运行时,蜘蛛脚本“runspider.py”工作正常

构建可执行文件“pyinstaller --onefile runspider.py”:

C:\Users\username\Documents\scrapyexe>pyinstaller --onefile runspider.py 19 INFO: 写 C:\Users\username\Documents\scrapyexe\runspider.spec 49 INFO: 测试设置图标的能力,版本资源.. . 59 INFO: ...资源更新可用 59 INFO: UPX 不可用。89 INFO:处理 hook hook-os 279 INFO:处理 hook hook-time 279 INFO:处理 hook hook-cPickle 380 INFO:处理 hook hook-_sre 561 INFO:处理 hook hook-cStringIO 700 INFO:处理 hook-encodings 720 INFO :处理挂钩挂钩编解码器 1351 信息:使用 C:\Users\username\Documents\scrapyexe 扩展 PYTHONPATH 1351 信息:检查分析 1351 信息:构建分析,因为 out00-Analysis.toc 不存在 1351 信息:运行分析 out00-Analysis.toc 1351 信息:添加 Microsoft.VC90。

py 3694 信息:分析 runspider.py 3755 警告:找不到 django 根目录!3755 信息:处理钩子 hook-django 3785 信息:处理钩子钩子-lxml.etree 4135 信息:处理钩子钩子-xml 4196 信息:处理钩子钩子-xml.dom 4246 信息:处理钩子钩子-xml.sax 4296 信息:处理钩子钩子-pyexpat 4305 信息:处理钩子钩子-xml.dom.domreg 4736 信息:处理钩子钩子-pywintypes 5046 信息:处理钩子钩子-distutils 7750 信息:已找到隐藏导入“编解码器” 7750 信息:隐藏导入“否则已找到编码' 7750 信息:寻找运行时挂钩 7750 信息:分析 rthook C:\python27\lib\site-packages\PyInstaller\loader\rth ooks\pyi_rth_twisted.py 8111 信息:分析 rthook C:

运行构建的 exe “runspider.exe”:

C:\Users\用户名\Documents\scrapyexe\dist>runspider.exe

回溯(最近一次通话最后):

文件“”,第 2 行,在

文件“C:\python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py”,第 270 行,在 load_module

执行(字节码,模块。字典

文件 "C:\Users\username\Documents\scrapyexe\build\runspider\out00-PYZ.pyz\scrapy" ,第 10 行,在

文件“C:\Users\username\Documents\scrapyexe\build\runspider\out00-PYZ.pyz\pkgutil”,第 591 行,在 get_data

文件“C:\python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py”,第 342 行,在 get_data

fp = 打开(路径,'rb')

IOError:[Errno 2] 没有这样的文件或目录:'C:\Users\username\AppData\Local\\Temp\_MEI15522\scrapy\VERSION'

我对任何帮助都非常有帮助。我需要知道如何从scrapy spider for windows 构建独立的exe。

非常感谢您的帮助。

4

2 回答 2

3

在里面scrapy/__init__.py,你会看到作者使用的部分pkgutil.get_data()。我不太确定您是否需要向 pyinstaller 指示 scrapy/VERSION 文本文件完全像数据文件一样打包,或者 pkgutil.get_data 是否适用于 pyinstaller,但这是我使用的快速破解。

只需转到__init__.py文件,注释掉这两行并替换为您选择的字符串,例如__version__="scrap-123". 您将需要__version__它,因为它在另一个模块中被引用。

__version__ = pkgutil.get_data(__package__, 'VERSION').decode('ascii').strip()
version_info = tuple(int(v) if v.isdigit() else v
                     for v in __version__.split('.'))
于 2014-12-30T06:31:56.543 回答
0

需要在runspider.exe(pyinstaller生成的exe文件)同目录下创建scrapy文件夹。

然后将“VERSION”和“mime.types”文件(默认路径%USERPROFILE%\AppData\Local\Programs\Python\Python37\Lib\site-packages\scrapy:)复制到您刚刚在您创建的scrapy文件夹中创建的scrapy。(如果只复制“VERSION”,会提示查找“mime.types”文件)

于 2018-10-25T02:10:44.970 回答