使用了一段時間,我發現這玩意不太好用,安裝多版本總是失敗,並且重復在系統環境中重復添加值,我還是喜歡使用anaconda。
由於Python的2.x與3.x版本的一些語法使用是不相同的,所以在寫和使用Python程序上都會遇到需要切換版本的情況。下面介紹切換Python版本的工具pyenv。
安裝pyenv
這里以mac舉例,需要先安裝brew,沒有安裝的先去安裝一下,現在安裝brew和pyenv都需要在終端上設置一下代理。
brew update
brew install pyenv
配置一下zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
zsh
安裝與查看py版本
# 查看可安裝的版本
pyenv install -l
# 安裝與卸載 python 3.6.6 , 注意安裝py版本也需要設置一下終端代理,不然可能會超時導致失敗
pyenv install 3.6.6
pyenv uninstall 3.6.6
# 查看當前的 Python 版本
pyenv version
# 查看已經安裝的Python版本
pyenv versions
安裝后的py版本在/Users/你的用戶名/.pyenv/versions
目錄。
➜ versions pwd
/Users/thoth/.pyenv/versions
➜ versions ls
3.6.6
➜ versions
切換py版本
# global 全局設置 一般不建議改變全局設置
pyenv global <python版本>
# shell 會話設置 只影響當前的shell會話
pyenv shell <python版本>
# 取消 shell 會話的設置
pyenv shell --unset
# local 本地設置 只影響所在文件夾
pyenv local <python版本>
優先級關系是:shell > local > global
這里做一下實驗,寫個小腳本運行一下:
seeversion.py
import sys
print(sys.version)
print(sys.version_info)
驗證切換到3.3.6
# 設置版本
➜ program pyenv shell 3.6.6
# 查看版本
➜ program pyenv versions
system
* 3.6.6 (set by /Users/thoth/program/.python-version)
# 運行腳本和預期一致
➜ program python seeversion.py
2.7.16 (default, Dec 13 2019, 18:00:32)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s
sys.version_info(major=2, minor=7, micro=16, releaselevel='final', serial=0)
驗證切換回系統默認版本
# 設置版本
➜ pyenv local system
# 查看版本
➜ ~ pyenv versions
* system (set by /Users/thoth/.python-version)
3.6.6
# 運行腳本和預期一致
➜ ~ python seeversion.py
2.7.16 (default, Dec 13 2019, 18:00:32)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s
sys.version_info(major=2, minor=7, micro=16, releaselevel='final', serial=0)
總結:
我感覺全局
就是你在終端的那個目錄運行,都有效,但是這樣設置未免太浪費,畢竟我們一般只在幾個固定目錄運行py腳本。
shell
就是你在當前打開的終端有效,關閉后無效。
local
就是,比如你cd進program目錄,就在當前的.program目錄內有效。其它目錄無效。
結合ide使用示例
想讓ide運行你安裝的版本,設置運行版本路徑為:/Users/thoth/.pyenv/versions/3.6.6/bin/python
即可。
和virtualenv的一些區別
pyenv可以很方便地在終端和ide切換不同版本。但對於需要開發不同py程序的開發人員來說,不同的項目意味着每個項目都有不同的擴展類庫,這些類庫都統一安裝在相應版本的python環境,會讓他們感到很不舒服,不方便管理,也會臃腫。就會希望每個項目的環境都是獨立的,純粹的,干凈的。有了這個挑剔的需求,virtualenv就是為這個而生的。
參考文獻
https://www.sqlsec.com/2019/12/pyenv.html#toc-heading-5
https://www.jianshu.com/p/8aaf2525fa80