管理眾多Python版本的神器:Pyenv
譯文譯者 | 布加迪
審校 | 重樓
想要在不破壞開發(fā)環(huán)境的情況下,在上午嘗試最新Python版本的新特性,在午休時間瀏覽遺留的Python代碼庫嗎?Pyenv可以幫這個忙。使用Pyenv,您可以安裝Python版本,在不同版本之間切換,并刪除不再需要的版本。
本教程介紹了Pyenv的安裝和使用。
安裝Pyenv
第一步是安裝Pyenv。我用的是Linux:Ubuntu 23.01。如果您使用Linux系統(tǒng),安裝Pyenv的最簡單方法是運行以下curl命令:
$ curl https://pyenv.run | bash
這將使用pyenv-installer安裝Pyenv。
安裝完成后,系統(tǒng)提示您完成shell環(huán)境的設(shè)置以使用Pyenv。為此,可以將以下命令添加到~/.bashrc文件:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
您已準(zhǔn)備好開始使用Pyenv了!
注意:如果您使用Mac或Windows系統(tǒng),查看有關(guān)如何安裝Pyenv的詳細(xì)說明:https://github.com/pyenv/pyenv#installation。在Windows上,您需要在Windows Subsystem for Linux(WSL)中安裝Pyenv。
使用Pyenv安裝Python版本
您已經(jīng)安裝了Pyenv,可以通過運行pyenv install命令來安裝特定的Python版本,就像這樣:
$ pyenv install version
執(zhí)行以下命令,查看已安裝的Python版本列表:
$ pyenv versions
* system (set by /home/balapriya/.pyenv/version)
我還沒有安裝任何新版本,所以Python的唯一版本是系統(tǒng)版本,這里是Python 3.11:
$ python3 -version
Python 3.11.4
不妨嘗試安裝Python 3.8和3.12。試著運行這個命令來安裝Python 3.8:
$ pyenv install 3.8
第一次嘗試使用Pyenv安裝特定版本的Python時,可能會遇到錯誤,這是由于缺少一些構(gòu)建依賴項。不用擔(dān)心,這很容易解決!
一些故障排除提示
嘗試使用pyenv install命令在我的Linux發(fā)行版上安裝Pyenv時,由于缺少構(gòu)建依賴項,我遇到了錯誤。
這個StackOverflow帖子包含有關(guān)為Pyenv安裝所需構(gòu)建依賴項的有用信息。運行以下命令以安裝丟失的依賴項:
$ apt-get install build-essential zlib1g-dev libffi-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev
現(xiàn)在,您應(yīng)該能夠安裝Python版本,不會出現(xiàn)任何錯誤:
$ pyenv install 3.8
注意:當(dāng)您安裝Python 3時,默認(rèn)安裝最新的版本。但是您也可以指定3.x,用于安裝特定的Python版本。還可以運行pyenv install --list來列出所有可以安裝的Python版本,不過版本很多。
同樣,運行pyenv install以安裝Python 3.12:
$ pyenv install 3.12
現(xiàn)在如果您運行pyenv versions,除了系統(tǒng)版本外,還會看到Python 3.8和3.12:
$ pyenv versions
* system (set by /home/balapriya/.pyenv/version)
3.8.18
3.12.0
設(shè)置Python全局版本
使用Pyenv,您可以設(shè)置全局Python版本。顧名思義,全局版本是您在命令行使用Python時所使用的Python版本。
但請注意將其設(shè)置為比較新的版本,以免在運行使用較新Python版本的項目時出現(xiàn)錯誤。
比如說,不妨看看如果將全局版本設(shè)置為Python 3.8.18會發(fā)生什么。
$ pyenv global 3.8.18
創(chuàng)建一個項目文件夾。在其中,用以下代碼創(chuàng)建一個main.py文件:
# main.py
def handle_status_code(status_code):
match status_code:
case 200:
print(f"Success! Status code: {status_code}")
case 404:
print(f"Not Found! Status code: {status_code}")
case 500:
print(f"Server Error! Status code: {status_code}")
case _:
print(f"Unhandled status code: {status_code}")
status_code = 404 # oversimplification, yes. handle_status_code(status_code)
如您所見,這段代碼使用了Python 3.10中引入的match-case語句。因此,需要Python 3.10或更高版本才能成功運行此代碼。如果您試著運行腳本,會得到以下錯誤:
File "main.py", line 2
match status_code:
^
SyntaxError: invalid syntax
在本文例子中,系統(tǒng)Python是3.11版本,比較新。所以我可以將全局版本設(shè)置為系統(tǒng)Python版本,如下所示:
$ pyenv global system
當(dāng)您現(xiàn)在運行同一個腳本時,應(yīng)該會得到以下輸出:
Output >>>
Not Found! Status code: 404
如果您的系統(tǒng)Python是舊版本,比如Python 3.6或更早版本,安裝更新版的Python并將其設(shè)置為全局版本將大有幫助。
為項目設(shè)置本地Python版本
當(dāng)您想要處理使用早期Python版本的項目時,希望安裝該版本以避免任何錯誤(比如不再支持的方法調(diào)用)。
假設(shè)您在處理項目A時想使用Python 3.8,處理項目B時想使用Python 3.10或更高版本,在這種情況下,就可以在項目A的目錄中設(shè)置本地Python版本,如下所示:
$ pyenv local 3.8.18
您可以運行python --version來檢查項目目錄中的Python版本:
$ python --version
Python 3.8.18
這在處理較舊的Python代碼庫時特別有用。
卸載Python版本
如果不再需要Python版本,可以通過運行pyenv uninstall命令卸載它。假設(shè)不再需要Python 3.8.18,那么可以通過運行以下命令來卸載它:
$ pyenv uninstall 3.8.18
您應(yīng)該在終端會看到類似的輸出:
pyenv: remove /home/balapriya/.pyenv/versions/3.8.18? [y|N] y
pyenv: 3.8.18 uninstalled
結(jié)語
但愿這篇關(guān)于Pyenv的入門教程對您有所幫助。總結(jié)幾個最常見的命令以便快速查詢:
命令 | 功能 |
pyenv versions | 列出目前已安裝的所有Python版本 |
pyenv install –list | 列出可以安裝的所有Python版本 |
pyenv install 3.x | 安裝Python 3.x的最新版 |
pyenv install 3.x.y | 安裝Python 3.x的版本y |
pyenv global 3.x | 將Python 3.x設(shè)為全局Python版本 |
pyenv local 3.x | 將您項目的本地Python版本設(shè)為3.x |
pyenv uninstall 3.x.y | 卸載Python 3.x的版本 |
Docker是一個很好的選擇,可以讓本地開發(fā)變得輕松,不用擔(dān)心依賴項沖突,但是每當(dāng)需要處理新項目就使用Docker或其他容器化解決方案可能是大材小用。
因此,我認(rèn)為能夠在命令行中安裝、管理和切換Python版本仍然有幫助。您還可以了解pyenv-virtualenv插件以創(chuàng)建和管理虛擬環(huán)境。
原文標(biāo)題:Too Many Python Versions to Manage? Pyenv to the Rescue,作者:Bala Priya C