不論是java還是c++兴溜,都有庫依賴的問題闸准,c++中叫dll hell渣淤,java中也有類似的現(xiàn)象挺据,java也存在不同版本編譯的runtime報錯問題。既然這些語言都有其掂,那么python也不例外油挥,只是python的現(xiàn)象更嚴重一些。2.x和3.x語法不兼容款熬,庫依賴就更不兼容了深寥。而linux和mac osX都有預(yù)裝的python版本,如果不注意的話贤牛,就會出現(xiàn)程序A依賴庫Lib1惋鹅,而程序B依賴庫Lib2,導(dǎo)致不兼容殉簸∪蚣或者是系統(tǒng)是2.7的python,但是你想用3.5喂链,這類問題是很頭疼的返十。所以你需要pyenv和virtualenv來解決這些wtk的問題。
pyenv椭微,按規(guī)矩先貼地址:https://github.com/pyenv/pyenv/洞坑,它能管理多個python版本,并且還能實現(xiàn)版本間的切換蝇率,還不影響系統(tǒng)中已有的版本迟杂。
virtualenv刽沾,按規(guī)矩再貼地址:https://github.com/pyenv/pyenv-virtualenv/,注意我貼的不是原始的virtualenv排拷,而是pyenv配合使用的侧漓。virtualenv是包管理工具,也就是庫管理工具监氢。它能解決的是各種庫之間的沖突布蔗。
一句話就是,pyenv用來管理python自身的版本浪腐,virtualenv用來管理某個python環(huán)境下的包纵揍。這樣就能解決文章開頭提到的問題。具體原理這里就不解釋了议街,篇幅有限泽谨。
下面來說一下安裝,mac osX下的安裝用brew就可以了:
brew install pyenv
brew install pyenv-virtualenv
安裝完成以后特漩,還有一個事情要注意吧雹,pyenv安裝python環(huán)境的時候有一些庫依賴要安裝。如果不清楚要裝哪些就等報錯以后再一個一個裝好了涂身。比如我遇到的錯誤就是這樣:
https_proxy=socks5://127.0.0.1:1086 pyenv install 3.5.3·
Downloading Python-3.5.3.tar.xz...
-> https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tar.xz
Installing Python-3.5.3...
**BUILD FAILED** (OS X 10.12.4 using python-build 20160602)
Inspect or clean up the working tree at /var/folders/w4/l6gnykmn5nn04r1l4ply4q340000gn/T/python-build.20170513141638.4369
Results logged to /var/folders/w4/l6gnykmn5nn04r1l4ply4q340000gn/T/python-build.20170513141638.4369.log
Last 10 log lines:
File "/private/var/folders/w4/l6gnykmn5nn04r1l4ply4q340000gn/T/python-build.20170513141638.4369/Python-3.5.3/Lib/ensurepip/__main__.py", line 4, in <module>
? ensurepip._main()
File "/private/var/folders/w4/l6gnykmn5nn04r1l4ply4q340000gn/T/python-build.20170513141638.4369/Python-3.5.3/Lib/ensurepip/__init__.py", line 209, in _main
? default_pip=args.default_pip,
File "/private/var/folders/w4/l6gnykmn5nn04r1l4ply4q340000gn/T/python-build.20170513141638.4369/Python-3.5.3/Lib/ensurepip/__init__.py", line 116, in bootstrap
? _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File "/private/var/folders/w4/l6gnykmn5nn04r1l4ply4q340000gn/T/python-build.20170513141638.4369/Python-3.5.3/Lib/ensurepip/__init__.py", line 40, in _run_pip
? import pip
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
大家看到上面是加了代理的雄卷,不加代理的話pyenv和pip安裝非常慢,由于眾所周知的原因访得,這里就不解釋了龙亲。當然也可以選擇使用國內(nèi)的一些pip鏡像陕凹,但因為國內(nèi)的鏡像老是短命悍抑,現(xiàn)在我還是更傾向于使用代理。
mac下還要執(zhí)行一句話:
xcode-select --install
現(xiàn)在開始安裝python3.5
pyenv install —list
列出所有可選的python環(huán)境杜耙,我想安裝3.5搜骡,然后:
192:zyctd shihuaping$ https_proxy=socks5://127.0.0.1:1086 pyenv install 3.5.3
Downloading Python-3.5.3.tar.xz...
-> https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tar.xz
Installing Python-3.5.3...
Installed Python-3.5.3 to /Users/shihuaping/.pyenv/versions/3.5.3
好,安裝成功佑女。然后切換到3.5.3记靡,如果不手工切換,仍然是使用的系統(tǒng)的版本团驱。
pyenv local 3.5.3
到此為止摸吠,解決了python版本的問題。