Hello Scrapy 踩坑 ImportError: No module named _util
日期: 2018/08/16
作業系統: CentOS Linux release 7.4.1708
Python版本: Python 2.7.5
玩Python少不了搞搞爬蟲,搞爬蟲少不了搞搞Scrapy,搞Scrapy少不了寫個HelloScrapy,寫HelloScrapy少不了踩坑???
是的,入門第一坑。
因為之前搞過Django環境,所以基本上要安裝的東西都有了。Scrapy的安裝通過pip命令也是非常簡單,百度一下,安裝以及入門教程,幾個命令幾行程式碼,第一個爬蟲已經整裝待發,就差一聲令下了。
事不宜遲——
scrapy crawl example
結果等待我的卻是一個ImportError: No module named _util
很遺憾,沒有吧當時的異常資訊複製下來,現在環境搞好了就懶得重新去搞壞它了,總之,就是scrapy呼叫到了一個叫Twisted的模組,Twisted又呼叫到了OpenSSL模組,但是它需要from OpenSSL._util import lib
。尷尬的是OpenSSL裡沒有_util這個模組!所以就報錯了。
這時候當然還是百度看看有沒有踩過同樣坑的前輩啦,然而沒有找到能幫我解決問題的帖子或部落格。
於是只好自己想辦法,搗鼓了一陣,還是一頭霧水,冷靜一下,其實問題還是很明顯的,應該是版本問題。
那就把所有相關的依賴版本都更新了一下,費了不少力氣,然並卵。
再冷靜一下,其實問題真的很明顯的,肯定是版本問題——更新不行就回退啊!
那麼怎麼回退呢?pip解除安裝模組的命令瞭解一下,然後再瞭解一下怎麼在安裝的時候指定版本,這都不是事兒,看命令幫助或者更簡單點百度一下。
問題是回退哪些模組?回退到什麼版本?
哪裡出錯?Twisted呼叫OpenSSL時出錯,那麼就是這兩個不匹配,那就是拿這兩個開刀。
回退到什麼版本?機智如我,這時候還是要去官網看看啊!
The minimal versions which Scrapy is tested against are:
- Twisted 14.0
- lxml 3.4
- pyOpenSSL 0.14
就是它了。
於是解除安裝並重裝了pyOpenSSL ,
pip uninstall pyopenssl
pip install pyopenssl==0.14
試著啟動爬蟲,可惜,還不行。
於是接著重灌了Twisted ,再試,終於成功了!
結論:
百度雖然很好用,但不一定任何時候都能幫你解決問題,遇到問題還是得自己冷靜思考,其實問題有可能真的【很明顯】。