【scrapy打包】使用pyinstaller将scrapy项目打包成独立可执行exe,及可能遇到的问题和解决方法

本文介绍了如何使用PyInstaller打包Scrapy项目,以及在打包过程中可能遇到的常见问题,如MS-GamingOverlay链接、lxml库导入、请求错误、路径问题、证书问题和导入错误的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyinstaller安装和基本使用

安装

pip install pyinstaller

常用打包命令

完全打包

pyinstaller run.py  # 需要打包的文件名

打包单文件

pyinstaller -F run.py
# 或者是
pyinstaller -onefile run.py

生成两个文件夹:bulid、dist,和一个配置文件run.spec

scrapy的准备工作

在这里插入图片描述
一般运行scrapy使用命令行进行操作,在此处要写一个入口文件,我这里是与scrapy.cfg文件平级,写了一个run.py文件
文件内容如下:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
# from taobaoProject.spiders.taobaolist import TaobaoListSpider
import os

os.chdir('./dmeo/spiders')  
# 如果你的demo01文件中有读取文文件的操作,需要更改当前运行环境,我这里是需要在spiders同级的文件夹ck中读取数据

process = CrawlerProcess(get_project_settings())
process.crawl('demo01')  # 填入你需要运行的文件名
# 如果你的爬虫文件需要传参 则在后面以key='value'的形式正常传参即可
# ex.   process.crawl('demo01',name='tom',age='age')
process.start()

用cmdline的写法会运行不起来。

from scrapy import cmdline
cmdline.execute('scrapy crawl demo01'.split())

当前的文件结构
在这里插入图片描述
ck 是我需要读取的文件夹,run是运行入口,之后对run进行打包。

正式打包

cd到需要打包的根目录下,进行pyinstaller操作

pyinstaller run.py

可运行的exe在新生成的dist\run
建议在cmd中运行exe,便于查看异常信息。

每次更改配置时,记得将执行exe的cmd窗口关闭,避免更新异常

运行后可能出现的问题(仅针对我目前遇到的)

1. 运行时出现 ‘打开此ms-gaminggoverlay链接’

在这里插入图片描述
其实这个窗口并不影响程序的正常运行,但是看着也很烦心就是了。
解决方法
关闭的方式也很简单,在Windows设置中查找‘Xbox Game Bar’将控制按钮关闭就好了。
在这里插入图片描述

2. lxml库的问题

ImportError: cannot import name _elementpath [3052] Failed to execute script 'crawl' due to unhandled exception!
lxml 库在打包后的可执行文件中出现了问题
解决方法
在run.spec中改写配置hiddenimports=['lxml._elementpath']
然后再在执行打包路径的那里执行pyinstaller run.spec
或者在第一次打包是使用如下命令

pyinstaller --hidden-import=lxml._elementpath run.py

3. 请求问题

TypeError: 'NoneType' object is not iterable
没有向parse传入请求。
之前为了测试,将start_requests中的yield scrapy.Request()注释掉了,从而发生的异常。
解决方法
做有效请求

4. 关于找不到路径的问题

前面说了,我的demo01.py调用了与spiders同级的文件夹ck做读取,所以我在run.py中更新了运行路径./dmeo/spiders。
但是在实际打包的dist文件夹中是没有这个路径的,也没有ck这个文件夹,所以直接运行时会报错
解决方法
解决方法也很简单,只需要在exe的同级目录中创建dmeo/spiders和dmeo/ck文件就可以了。
读取文件得到具体路径根据实际代码进行修改。

5. 证书问题

OSError: Could not find a suitable TLS CA certificate bundle, invalid path:
在使用 Scrapy 进行爬取时出现了 TLS CA 证书的问题。错误信息显示了无法找到合适的 TLS CA 证书文件,导致了无法进行 HTTPS 请求
解决方法
将证书文件夹复制到exe同级文件夹中
查找证书路径

import certifi
print(certifi.where())

在这里插入图片描述
跳转到certifi所在文件夹,将certifi整个文件夹复制到exe同级文件夹内。

6. ImportError 父包导入问题

ImportError: attempted relative import with no known parent package

触发则个异常的原因是因为我在run.py中做了相对导入,即:

from .dmeo.spiders.demo01 import Demo02Spider

导致程序无法确认导入包的明确位置
解决方法:
将相对路径改为绝对路径,从最大根目录开始跟。

from dmeo.dmeo.spiders.demo01 import Demo02Spider
要将Scrapy项目打包exe文件,可以使用PyInstaller工具。以下是一些基本步骤: 1. 安装PyInstaller使用pip安装PyInstaller,可以在命令行中执行以下命令: ``` pip install pyinstaller ``` 2. 创建打包脚本:在Scrapy项目的根目录下创建一个打包脚本文件(例如:build.py),并在其中指定需要打包的入口文件其他选项。以下是一个示例代码: ```python import PyInstaller.__main__ PyInstaller.__main__.run([ 'your_script.py', # 入口文件名 '--onefile', # 打包为单个exe文件 '--name=your_app', # exe文件的名称 '--clean' # 清理临时文件 ]) ``` 3. 打包项目:在命令行中执行以下命令,运行打包脚本进行项目打包: ``` python build.py ``` 4. 完打包打包后,PyInstaller会在项目目录下生一个dist文件夹,里面包含了打包后的exe文件其他必要文件。 请注意,Scrapy项目可能有一些依赖项需要手动处理,例如需要将Scrapy项目所依赖的其他模块或资源文件一并打包。你可能需要在打包脚本中指定这些依赖项。此外,由于Scrapy项目通常是一个命令行应用程序,因此生exe文件可能需要在命令行中运行,并提供必要的参数选项。 以上是一个基本的打包流程,具体的步骤配置可能会根据项目的复杂性特殊需求有所变化。你可以参考PyInstaller的文档示例来进行更详细的配置定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值