日常開發(fā)遇到的實際問題
因為Python版本一直更新患亿,每個項目使用的Python版本不一樣坤检,有的項目使用Python3.6匀奏,有的使用Python3.7蛔翅,有的使用Python2瓶殃。
如果在官網(wǎng)下載指定的安裝包進行安裝充包,你會發(fā)現(xiàn)新安裝的版本總會覆蓋掉之前的版本,但是舊版本又有其他的項目在使用遥椿,并不想被刪除基矮。
這時就希望有一個工具可以方便地管理多個Python版本,最好還能多個版本之間相互切換冠场。
pyenv正好滿足這個需求家浇。
簡介
Simple Python version management:pyenv (點擊進入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
默認會從python.org下載指定版本,速度卻非常慢(除非你在墻外)慈鸠。 -
安裝指定的python離線安裝包
這里蓝谨,我們需要知道一點:pyenv不僅可以在線下載安裝python版本,還可以從它的緩存目錄~.pyenv/cache
安裝離線安裝包青团。其實執(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)建一個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安裝過程錯誤排查
MacOS在安裝過程中可能會出現(xiàn)下面的問題:
...
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
這個問題在github上已被指出:Issue #454
解決方法就是需要從命令行更新Xcode凭豪,終端運行指令xcode-select --install
WTF!可能又會提示:...the tools are already installed.
一頓搜索晒杈,找到解決方法:# How to update Xcode from command line
方法就是終端運行指令softwareupdate --install -a
運行完成后嫂伞,軟件更新會彈出可用更新的提示,點擊現(xiàn)在更新。
更新完成后帖努,再次嘗試安裝撰豺,還是失敗,提示同樣的錯誤F从唷N坭搿!
又是一頓搜索匙监。凡橱。。
最后還是萬能的Stack Overflow舅柜,找到了解決方法:# pyenv zlib error on MacOS:
只需要終端運行指令:
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