启动pyspider报错

输入命令:pyspider all

报错如下:
启动pyspider报错

原因:

新版本Python引入了关键字async关键字(楼主使用的python版本是3.8),造成了python和pyspider关键字冲突,所以在安装好pyspider库之后运行pyspider all 会报错。

解决方案:

1. 为了解决关键字冲突的问题,主要修改以下三个文件:

  • \Lib\site-packages\pyspider\run.py
  • \Lib\site-packages\pyspider\fetcher\tornado_fetcher.py
  • \Lib\site-packages\pyspider\webui\app.py

注意:这里写的是相对路径,根据自己的python安装路径来找就可以了。

1. run.py和app.py下的async都是变量,可直接替换成其他非关键字,此处我替换为async_mode

2. tornado_fetcher.py中,建议不使用全部替换,手动更改:非变量不要修改:如CurlAsyncHTTPClient;变量如async=True修改为async_mode=True

2. 启动测试,又报错

报错如下:

启动pyspider报错
又是版本的问题,这里直接降低wsgidav的版本

python -m pip install wsgidav==2.4.1

接着测试,接着报错:

启动pyspider报错
wsgidav中1.0的新版本werkzeug没有DispatcherMiddleware,werkzeug的版本需要介于0.15-1.0之间。(pyspider需要0.15+的werkzeug版本)。

 # 卸载werkzeug
python -m pip  uninstall werkzeug
  #安装0.16.1版本
python -m pip install werkzeug==0.16.1 

好了,再一次测试,发现终于可以用了。
启动pyspider报错
大功告成!

总结:

没事儿不要瞎玩,玩新版本就得踩坑。哎,我没事儿,溜达,有路我不走,就是要踩坑,就玩~

上一篇:python AttributeError: ‘Request‘ object has no attribute ‘is_xhr‘ 报错的解决办法


下一篇:Flask依赖一个实现wsgi协议的模块:werkzeug