Python切換版本工具pyenv



使用了一段時間,我發現這玩意不太好用,安裝多版本總是失敗,並且重復在系統環境中重復添加值,我還是喜歡使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM