在Ubuntu中运行Scrapy遇到的问题。
思路,补全缺失的库,重新编译python解释器。
一、安装缺失的sqlite3库
sudo apt-get install libsqlite3-dev
你可以试试: whereis sqlite3
如果没有出现/usr/include/sqlite3.h
这个头文件。。。
你再试试 sudo apt-get install sqlite3*
这种方式有点浪费
二、重新编译python
提供一个安装python3.6.5的参考案例, 官方其他版本
sudo apt install libffi-dev
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
tar -xvf Python-3.6.5.tar.xz && cd Python-3.6.5
./configure --enable-loadable-sqlite-extensions && \
make && sudo make install
三、安装Twisted
直接安装,一般都会报错。
pip install Twisted
下载源码安装吧。
wget https://github.com/twisted/twisted/archive/twisted-17.5.0.tar.gz
tar -zxvf twisted-17.5.0.tar.gz
cd twisted-18.4.0 && python setup.py install
首先,python3.6.5 和 twisted-17.5.0这两种组合是没有出现问题的。我尝试过安装最新的twisted-18.9.0,出于某种未知的原因,编译后并不能用。版本过低会出现另外的错。建议安装16版本以上的。我遇上另外一个坑就是twisted版本过低(13.几来着)。
四、原因分析
一顿瞎操作导致机器宕机。重新安装环境,自带的是python3.5,需要安装更新的python版本如3.6或3.7,自己下载python源码编译安装,如果是一个新机器,这就非常容易出现这个问题。
原因:编译python的时候,缺失sqlite3的库,并不会直接报错。一旦安装Twisted,运行 yield .这个错误就出来。
巨坑,第二次踩坑。。。
编译的时候会在这些目录下找sqlite3,没找到,编译的时候也不报错,坑。。
sqlite_inc_paths = [ '/usr/include',
'/usr/local/sqlite3/include',
'/usr/include/sqlite',
'/usr/include/sqlite3',
'/usr/local/include',
'/usr/local/include/sqlite',