scrapy的安裝
場(chǎng)景描述
最近公司業(yè)務(wù)不是很忙,想從網(wǎng)上找點(diǎn)資料出來(lái),用來(lái).....(你懂得,,,別想歪,我是正經(jīng)人!)
由于本人是做java的,之前一直在用jsoup來(lái)玩爬蟲,聽說(shuō)python的scrapy爬蟲簡(jiǎn)直就是搜易賊(so easy)。
哪就走起吧.
配置狀況
我用的mac版本是OS X EI capitan。
問(wèn)題描述
本機(jī)自帶了python2.7,直接安裝scrapy就可以了,
不過(guò)在安裝scrapy之前要先確定你的電腦是否已經(jīng)安裝了pip。
如果沒(méi)安裝pip的話,打開終端(我用的itrem2),執(zhí)行以下的命令
sudo easy_install pip
pip 和 easy_install 都是 Python 的框架管理命令,pip 是對(duì) easy_install的升級(jí)。
安裝完pip之后我們要開始安裝scrapy了,打開終端執(zhí)行
sudo pip install Scrapy
如果執(zhí)行成功,那么 Scrapy 就安裝成功了,但往往事與愿違,你很有可能遇到如下錯(cuò)誤:
OSError: [Errno 1] Operation not permitted: '/tmp/pip-Tz8iWw-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
故障定位
我google了好久,查了好多原因,試了很多種辦法發(fā)現(xiàn)都沒(méi)說(shuō)道點(diǎn)子上,最后在以為大神的博客里找到了原因
Because six ships with the system, and almost every popular python project uses it for forwards compatibility, pip tries to upgrade the version it finds first in the python path. Since SIP blocks this, it fails.
Any python dependencies system software has should be hard-coded, and the default path should look in /Library/Python/2.7/site-packages first in order.
原文傳送門
這時(shí)候,我們知道了新版的mac系統(tǒng)增加了sip特性,即使使用 sudo 也無(wú)法使獲得最高權(quán)限,無(wú)法對(duì) MAC 系統(tǒng)級(jí)的目錄進(jìn)行更改
解決問(wèn)題
既然我們已經(jīng)發(fā)現(xiàn)問(wèn)題出現(xiàn)在sip上了,那我們把sip特性關(guān)閉了不就完了么,那么我們?cè)趺搓P(guān)閉sip特性呢。
- 重啟 MAC ,在重啟的過(guò)程中按住 Command+R,進(jìn)入安全模式
- 在頂部的菜單欄中打開終端 ,輸入 csrutil disable 命令關(guān)閉 SIP 安全特性(想要在開啟sip的話就用csrutil enable命令即可)
- 重啟 MAC就ok了
此時(shí),sip特性已經(jīng)被我們關(guān)閉了,你可以重新安裝scrapy試試,打開終端執(zhí)行
sudo pip install Scrapy
在短暫的安裝過(guò)程等待過(guò)后,你原本期望的是安裝成功的提示,但是你發(fā)現(xiàn)安裝又tm的失敗了,fuck。
這時(shí)候又發(fā)送什么原因了呢,看來(lái)下控制臺(tái),你發(fā)現(xiàn)了如下的錯(cuò)誤
Scrapy throws ImportError: cannot import name xmlrpc_client
這貨又是什么梗?
于是乎,又google了下,發(fā)現(xiàn)是six的版本太低了原文傳送門
那我們更新下six的版本吧,打開控制臺(tái)輸入以下的命令
sudo rm -rf /Library/Python/2.7/site-packages/six*
sudo rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six*
sudo pip install six
ok,我們把six的版本也更新完了,哪這時(shí)候我們?cè)僭囅掳惭bscrapy把.
這時(shí)候會(huì)提示你installation successful,那就恭喜你成功的解決了sip,并安裝了scrapy.
python3的安裝
需求描述
大家應(yīng)該都知道MAC OS X EI Capitan 系統(tǒng) 支持 python的多版本共存,即在我們的環(huán)境變量中可以配置python2和python3。
安裝過(guò)程
先安裝python3,如果你安裝了homebrew,那么你只需要輸入一條命令
brew install python3即可安裝python3此時(shí)你可以輸入python3試試,但是你發(fā)現(xiàn)這時(shí)候系統(tǒng)會(huì)提示命令找不到(你都沒(méi)配置python3,系統(tǒng)找個(gè)毛啊)
這時(shí)候我們進(jìn)行配置了,首先把安裝好的 Python3 目錄移到原本系統(tǒng)所持有的目錄位置,在終端輸入以下命令:
sudo mv /usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5 /System/Library/Frameworks/Python.framework/Versions
注意:/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5是你的python3的安裝路徑,一般用homebrew安裝的會(huì)是這個(gè)路徑,如果你從官網(wǎng)下載安裝的不一定是這個(gè)路徑,具體路徑請(qǐng)參考你的python3的安裝路徑然后修改文件所屬的 Group 設(shè)置 Group 為 wheel,在終端內(nèi)輸入以下命令
sudo chown -R root:wheel /usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5重新鏈接可執(zhí)行文件
sudo ln -s /usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/bin/pydoc3.5 /usr/bin/pydoc3
sudo ln -s //usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /usr/bin/python3
sudo ln -s /usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/bin/pythonw3.5 /usr/bin/pythonw3
sudo ln -s /usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/bin/python3.5m-config /usr/bin/python3-config
查看結(jié)果
在終端里輸入 python3 ,會(huì)出現(xiàn)如下提示,說(shuō)明配置成功:
Python 3.5.0 (default, Sep 23 2015, 04:41:38)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0
(clang-700.0.72)] on darwin
Type "help", "copyright", "credits" or
"license" for more information.