在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',