1. 程式人生 > >Hello Scrapy 踩坑 ImportError: No module named _util

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 ,再試,終於成功了!

結論:

百度雖然很好用,但不一定任何時候都能幫你解決問題,遇到問題還是得自己冷靜思考,其實問題有可能真的【很明顯】。