Linux ModuleNotFoundError: No module named '_sqlite3'

在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',
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章