日常開發(fā)遇到的實(shí)際問題
因?yàn)镻ython版本一直更新,每個(gè)項(xiàng)目使用的Python版本不一樣,有的項(xiàng)目使用Python3.6,有的使用Python3.7,有的使用Python2。
如果在官網(wǎng)下載指定的安裝包進(jìn)行安裝,你會發(fā)現(xiàn)新安裝的版本總會覆蓋掉之前的版本,但是舊版本又有其他的項(xiàng)目在使用,并不想被刪除。
這時(shí)就希望有一個(gè)工具可以方便地管理多個(gè)Python版本,最好還能多個(gè)版本之間相互切換。
pyenv正好滿足這個(gè)需求。
簡介
Simple Python version management:pyenv (點(diǎn)擊進(jìn)入GitHub主頁)
pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
安裝
- 安裝方式1. 僅限Mac
$ brew install pyenv - 安裝方式2. 自動安裝腳本
pyenv-installer
使用
- 查看所有可用的版本
$ pyenv install -l - 安裝指定版本
-
$ pyenv install 3.6.5
默認(rèn)會從python.org下載指定版本,速度卻非常慢(除非你在墻外)。 -
安裝指定的python離線安裝包
這里,我們需要知道一點(diǎn):pyenv不僅可以在線下載安裝python版本,還可以從它的緩存目錄~.pyenv/cache安裝離線安裝包。其實(shí)執(zhí)行$ pyenv install 3.6.5,也是先檢查緩存目錄~.pyenv/cache下是否存在指定安裝包,如果沒有就會從網(wǎng)絡(luò)下載。
所以,我們可以在本地終端下載好指定版本安裝包,比如:
$ wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
然后將其移動到.pyenv/cache文件夾下,最后再次執(zhí)行$ pyenv install 3.6.5,便可順利安裝。
- 創(chuàng)建虛擬環(huán)境
例如:創(chuàng)建一個(gè)3.6.5版本的虛擬環(huán)境:$ pyenv virtualenv 3.6.5 env_*** - 查看所有的Python環(huán)境
$ pyenv versions - 激活指定的虛擬環(huán)境
$ pyenv activate env_*** - 退出當(dāng)前虛擬環(huán)境
$ pyenv deactivate
當(dāng)然你也可以直接關(guān)掉終端。 - 刪除虛擬環(huán)境
$ pyenv uninstall env_***
MacOS安裝過程錯(cuò)誤排查
MacOS在安裝過程中可能會出現(xiàn)下面的問題:
...
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
這個(gè)問題在github上已被指出:Issue #454
解決方法就是需要從命令行更新Xcode,終端運(yùn)行指令xcode-select --install
WTF!可能又會提示:...the tools are already installed.
一頓搜索,找到解決方法:# How to update Xcode from command line
方法就是終端運(yùn)行指令softwareupdate --install -a
運(yùn)行完成后,軟件更新會彈出可用更新的提示,點(diǎn)擊現(xiàn)在更新。
更新完成后,再次嘗試安裝,還是失敗,提示同樣的錯(cuò)誤!??!
又是一頓搜索。。。
最后還是萬能的Stack Overflow,找到了解決方法:# pyenv zlib error on MacOS:
只需要終端運(yùn)行指令:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
然后再次執(zhí)行安裝pyenv install 3.6.5就可以安裝成功啦。
zhanglilongs-MacBook-Pro:~ zhanglilong$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Password:
installer: Package name is macOS_SDK_headers_for_macOS_10.14
installer: Installing at base path /
installer: The install was successful.
zhanglilongs-MacBook-Pro:~ zhanglilong$ pyenv install 3.6.5
python-build: use openssl from homebrew
python-build: use readline from homebrew
Installing Python-3.6.5...
python-build: use readline from homebrew
Installed Python-3.6.5 to /Users/zhanglilong/.pyenv/versions/3.6.5
zhanglilongs-MacBook-Pro:~ zhanglilong$ pyenv versions
* system (set by /Users/zhanglilong/.pyenv/version)
3.6.5