那些年,我們用mac遇到的梗

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ò)程

  1. 先安裝python3,如果你安裝了homebrew,那么你只需要輸入一條命令brew install python3即可安裝python3

  2. 此時(shí)你可以輸入python3試試,但是你發(fā)現(xiàn)這時(shí)候系統(tǒng)會(huì)提示命令找不到(你都沒(méi)配置python3,系統(tǒng)找個(gè)毛啊)

  3. 這時(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的安裝路徑

  4. 然后修改文件所屬的 Group 設(shè)置 Group 為 wheel,在終端內(nèi)輸入以下命令sudo chown -R root:wheel /usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5

  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.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容