Linux中國

如何在 Mac 上使用 pyenv 運行多個版本的 Python

即使對於有經驗的開發人員,管理本地 Python 開發環境仍然是一個挑戰。儘管有詳細的軟體包管理策略,但仍需要採取另外的步驟來確保你在需要時運行所需的 Python 版本。

為什麼 Python 版本重要?

起初這是一個奇怪的概念,但是編程語言會像其他任何軟體一樣發生變化。它們有錯誤、修復和更新,就像你喜歡的 API 和任何其他軟體一樣。同樣,不同的發行版由稱為語義化版本的三位數標識。

??? pic.twitter.com/yt1Z2439W8

— Denny Perez (@dennyperez18) May 28, 2019

多年來,Python 2 是該語言的常用主要版本。在 2020 年 1 月,Python 2 到達最後壽命,此後,Python 的核心維護者將僅支持 Python 3。Python 3 穩步發展,並定期發布新更新。對我來說定期獲取這些更新很重要。

最近,我試圖在 macOS 上運行一個依賴於 Python 3.5.9 的項目,而我的系統上並沒有安裝這個版本。我認為 Python 包管理器 pip 可以安裝它,但事實並非如此:

$ pip install python3.5.9
Collecting python3.5.9
  ERROR: Could not find a version that satisfies the requirement python3.5.9 (from versions: none)
ERROR: No matching distribution found for python3.5.9

或者,我也可以從官方 Python 網站下載該版本,但我如何在我的 Mac 上與現有的 Python 版本一起運行?每次運行時指定 Python 解釋器版本(例如 python3.7 或 python3.5)似乎很容易出錯。一定會有更好的方法。

(說明:我知道這對經驗豐富的 Python 開發人員沒有意義,但對當時的我來說是有意義的。我很樂意談一談為什麼我仍然認為它應該這樣做。)

安裝和設置 pyenv

值得慶幸的是,pyenv 可以繞開這一系列複雜的問題。首先,我需要安裝 pyenv。我可以從源碼克隆並編譯它,但是我更喜歡通過 Homebrew 包管理器來管理軟體包:

$ brew install pyenv

為了通過 pyenv 使用 Python 版本,必須了解 shell 的 PATH 變數。PATH 決定了 shell 通過命令的名稱來搜索文件的位置。你必須確保 shell 程序能夠找到通過 pyenv 運行的 Python 版本,而不是默認安裝的版本(通常稱為系統版本)。如果不更改路徑,那麼結果如下:

$ which python
/usr/bin/python

這是 Python 的系統版本。

要正確設置 pyenv,可以在 Bash 或 zsh 中運行以下命令:

$ PATH=$(pyenv root)/shims:$PATH

現在,如果你檢查 Python 的版本,你會看到它是 pyenv 管理的版本:

$ which python
/Users/my_username/.pyenv/shims/python

該導出語句(PATH=)僅會對該 shell 實例進行更改,為了使更改永久生效,你需要將它添加到點文件當中。由於 zsh 是 macOS 的默認 shell,因此我將重點介紹它。將相同的語法添加到 ~/.zshrc 文件中:

$ echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc

現在,每次我們在 zsh 中運行命令時,它將使用 pyenv 版本的 Python。請注意,我在 echo 中使用了單引號,因此它不會評估和擴展命令。

.zshrc 文件僅管理 zsh 實例,因此請確保檢查你的 shell 程序並編輯關聯的點文件。如果需要再次檢查默認 shell 程序,可以運行 echo $SHELL。如果是 zsh,請使用上面的命令。如果你使用 Bash,請將 ~/.zshrc 更改為 ~/.bashrc。如果你想了解更多信息,可以在 pyenvREADME 中深入研究路徑設置

使用 pyenv 管理 Python 版本

現在 pyenv 已經可用,我們可以看到它只有系統 Python 可用:

$ pyenv versions
system

如上所述,你絕對不想使用此版本(閱讀更多有關信息)。現在 pyenv 已正確設置,我希望它能有我經常使用的幾個不同版本的 Python。

有一種方法可以通過運行 pyenv install --list 來查看 pyenv 可以訪問的所有倉庫中的所有 Python 版本。這是一個很長的列表,將來回顧的時候可能會有所幫助。目前,我決定在 Python 下載頁面找到的每個最新的「點版本」(3.5.x 或 3.6.x,其中 x 是最新的)。因此,我將安裝 3.5.9 和 3.8.0:

$ pyenv install 3.5.9
$ pyenv install 3.8.0

這將需要一段時間,因此休息一會(或閱讀上面的鏈接之一)。有趣的是,輸出中顯示了該版本的 Python 的下載和構建。例如,輸出顯示文件直接來自 Python.org

安裝完成後,你可以設置默認值。我喜歡最新的,因此將全局默認 Python 版本設置為最新版本:

$ pyenv global 3.8.0

該版本立即在我的 shell 中設置完成。確認一下:

$ python -V
Python 3.8.0

我要運行的項目僅適於 Python 3.5,因此我將在本地設置該版本並確認:

$ pyenv local 3.5.9
$ python -V
Python 3.5.9

因為我在 pyenv 中使用了 local 選項,所以它向當前目錄添加了一個文件來跟蹤該信息。

$ cat .python-version
3.5.9

現在,我終於可以為想要的項目設置虛擬環境,並確保運行正確版本的 Python。

$ python -m venv venv
$ source ./venv/bin/activate
(venv) $ which python
/Users/mbbroberg/Develop/my_project/venv/bin/python

要了解更多信息,請查看有關在 Mac 上管理虛擬環境的教程。

總結

默認情況下,運行多個 Python 版本可能是一個挑戰。我發現 pyenv 可以確保在我需要時可以有我需要的 Python 版本。

你還有其他初學者或中級 Python 問題嗎? 請發表評論,我們將在以後的文章中考慮介紹它們。

via: https://opensource.com/article/20/4/pyenv

作者:Matthew Broberg 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國