MacOS 系統中如何設定 Python 虛擬環境

Matthew Broberg發表於2019-07-11

使用 pyenv 和 virtualwrapper 來管理你的虛擬環境,可以避免很多困惑。

作為 Python 開發者和 MacOS 使用者,拿到新機器首先要做的就是設定 Python 開發環境。下面是最佳實踐(雖然我們已經寫過 在 MacOS 上管理 Python 的其它方法)。

預備

首先,開啟終端,在其冰冷毫無提示的視窗輸入 xcode-select --install 命令。點選確認後,基本的開發環境就會被配置上。MacOS 上需要此步驟來設定本地開發實用工具庫,根據 OS X Daily 的說法,其包括 ”許多常用的工具、實用程式和編譯器,如 make、GCC、clang、perl、svn、git、size、strip、strings、libtool、cpp、what 及許多在 Linux 中系統預設安裝的有用命令“。

接下來,安裝 Homebrew, 執行如下的 Ruby 指令碼。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果你像我一樣,對隨意就執行的來源於網際網路的指令碼心存疑慮的話,可以點選上面的指令碼去仔細看看其具體功能。

一旦安裝完成後,就恭喜了,你擁有了一個優秀的包管理工具。自然的,你可能接下來會執行 brew install python 或其他的命令。不要這樣,哈哈!Homebrew 是為我們提供了一個 Python 的管理版本,但讓此工具來管理我們的 Python 環境話,很快會失控的。我們需要 pyenv,一款簡單的 Python 版本管理工具,它可以安裝執行在 許多作業系統 上。執行如下命令:

$ brew install pyenv

想要每次開啟命令提示框時 pyenv 都會執行的話,需要把下面的內容加入你的配置檔案中(MacOS 中預設為 .bash_profile,位於家目錄下):

$ cd ~/
$ echo 'eval "$(pyenv init -)"' >> .bash_profile

新增此行內容後,每個終端都會啟動 pyenv 來管理其 PATH 環境變數,並插入你想要執行的 Python 版本(而不是在環境變數裡面設定的初始版本。更詳細的資訊,請閱讀 “如何給 Linux 系統設定 PATH 變數”)。開啟新的終端以使修改的 .bash_profile 檔案生效。

在安裝你中意的 Python 版本前,需要先安裝一些有用的工具,如下示:

$ brew install zlib sqlite

pyenv 依賴於 zlib 壓縮演算法和 SQLite 資料庫,如果未正確配置,往往會導致構建問題。將這些匯出配置命令加入當前的終端視窗執行,確保它們安裝完成。

$ export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/sqlite/lib"
$ export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/sqlite/include"

現在準備工作已經完成,是時候安裝一個適合於現代人的 Python 版本了:

$ pyenv install 3.7.3

去喝杯咖啡吧,挑些豆類,親自燒烤,然後品嚐。說這些的意思是上面的安裝過程需要一段時間。

新增虛擬環境

一旦完成,就可以愉快地使用虛擬環境了。如沒有接下來的步驟的話,你只能在你所有的工作專案中共享同一個 Python 開發環境。使用虛擬環境來隔離每個專案的依賴關係的管理方式,比起 Python 自身提供的開箱即用功能來說,更加清晰明確和更具有重用性。基於這些原因,把 virtualenvwrapper 安裝到 Python 環境中吧:

$ pyenv global 3.7.3
# Be sure to keep the $() syntax in this command so it can evaluate
$ $(pyenv which python3) -m pip install virtualenvwrapper

再次開啟 .bash_profile 檔案,把下面內容新增進去,使得每次開啟新終端時它都有效:

# We want to regularly go to our virtual environment directory
$ echo 'export WORKON_HOME=~/.virtualenvs' >> .bash_profile
# If in a given virtual environment, make a virtual environment directory
# If one does not already exist
$ echo 'mkdir -p $WORKON_HOME' >> .bash_profile
# Activate the new virtual environment by calling this script
# Note that $USER will substitute for your current user
$ echo '. ~/.pyenv/versions/3.7.3/bin/virtualenvwrapper.sh' >> .bash_profile

關掉終端再重新開啟(或者執行 exec /bin/bash -l 來重新整理當前的終端會話),你會看到 virtualenvwrapper 正在初始化環境配置:

$ exec /bin/bash -l
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/get_env_details

從此刻開始,你的所有工作都是在虛擬環境中的,其允許你使用臨時環境來安全地開發。使用此工具鏈,你可以根據工作所需,設定多個專案並在它們之間切換:

$ mkvirtualenv test1
Using base prefix '/Users/moshe/.pyenv/versions/3.7.3'
New python executable in /Users/moshe/.virtualenvs/test1/bin/python3
Also creating executable in /Users/moshe/.virtualenvs/test1/bin/python
Installing setuptools, pip, wheel...
done.
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test1/bin/get_env_details
(test1)$ mkvirtualenv test2
Using base prefix '/Users/moshe/.pyenv/versions/3.7.3'
New python executable in /Users/moshe/.virtualenvs/test2/bin/python3
Also creating executable in /Users/moshe/.virtualenvs/test2/bin/python
Installing setuptools, pip, wheel...
done.
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/moshe/.virtualenvs/test2/bin/get_env_details
(test2)$ ls $WORKON_HOME
get_env_details postmkvirtualenv premkvirtualenv
initialize postrmvirtualenv prermvirtualenv
postactivate preactivate test1
postdeactivate predeactivate test2
postmkproject premkproject
(test2)$ workon test1
(test1)$

此處,使用 deactivate 命令可以退出當前環境。

推薦實踐

你可能已經在比如 ~/src 這樣的目錄中新增了長期的專案。當要開始了一個新專案時,進入此目錄,為此專案增加子資料夾,然後使用強大的 Bash 解釋程式自動根據你的目錄名來命令虛擬環境。例如,名稱為 “pyfun” 的專案:

$ mkdir -p ~/src/pyfun && cd ~/src/pyfun
$ mkvirtualenv $(basename $(pwd))
# we will see the environment initialize
(pyfun)$ workon
pyfun
test1
test2
(pyfun)$ deactivate
$

當需要處理此專案時,只要進入該目錄,輸入如下命令重新連線虛擬環境:

$ cd ~/src/pyfun
(pyfun)$ workon .

初始化虛擬環境意味著對 Python 版本和所載入的模組的時間點的拷貝。由於依賴關係會發生很大的改變,所以偶爾需要重新整理專案的虛擬環境。這種情況,你可以通過刪除虛擬環境來安全的執行此操作,原始碼是不受影響的,如下所示:

$ cd ~/src/pyfun
$ rmvirtualenv $(basename $(pwd))
$ mkvirtualenv $(basename $(pwd))

這種使用 pyenvvirtualwrapper 管理虛擬環境的方法可以避免開發環境和執行環境中 Python 版本的不一致出現的苦惱。這是避免混淆的最簡單方法 - 尤其是你工作的團隊很大的時候。

如果你是初學者,正準備配置 Python 環境,可以閱讀下 MacOS 中使用 Python 3 文章。 你們有關於 Python 相關的問題嗎,不管是初學者的還是中級使用者的?給我們留下評論資訊,我們在下篇文章中會考慮講解。


via: https://opensource.com/article/19/6/virtual-environments-python-macos

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

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

MacOS 系統中如何設定 Python 虛擬環境

訂閱“Linux 中國”官方小程式來檢視

相關文章