使用 pyenv 和 virtualwrapper 來管理你的虛擬環境,能夠避免不少困惑。html
做爲 Python 開發者和 MacOS 用戶,拿到新機器首先要作的就是設置 Python 開發環境。下面是最佳實踐(雖然咱們已經寫過 在 MacOS 上管理 Python 的其它方法)。python
首先,打開終端,在其冰冷毫無提示的窗口輸入 xcode-select --install
命令。點擊確認後,基本的開發環境就會被配置上。MacOS 上須要此步驟來設置本地開發實用工具庫,根據 OS X Daily 的說法,其包括 」許多經常使用的工具、實用程序和編譯器,如 make、GCC、clang、perl、svn、git、size、strip、strings、libtool、cpp、what 及許多在 Linux 中系統默認安裝的有用命令「。react
接下來,安裝 Homebrew, 執行以下的 Ruby 腳本。linux
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製代碼
若是你像我同樣,對隨意就運行的來源於互聯網的腳本心存疑慮的話,能夠點擊上面的腳本去仔細看看其具體功能。git
一旦安裝完成後,就恭喜了,你擁有了一個優秀的包管理工具。天然的,你可能接下來會執行 brew install python
或其餘的命令。不要這樣,哈哈!Homebrew 是爲咱們提供了一個 Python 的管理版本,但讓此工具來管理咱們的 Python 環境話,很快會失控的。咱們須要 pyenv,一款簡單的 Python 版本管理工具,它能夠安裝運行在 許多操做系統 上。運行以下命令:github
$ brew install pyenv
複製代碼
想要每次打開命令提示框時 pyenv
都會運行的話,須要把下面的內容加入你的配置文件中(MacOS 中默認爲 .bash_profile
,位於家目錄下):算法
$ cd ~/
$ echo 'eval "$(pyenv init -)"' >> .bash_profile
複製代碼
添加此行內容後,每一個終端都會啓動 pyenv
來管理其 PATH
環境變量,並插入你想要運行的 Python 版本(而不是在環境變量裏面設置的初始版本。更詳細的信息,請閱讀 「如何給 Linux 系統設置 PATH 變量」)。打開新的終端以使修改的 .bash_profile
文件生效。sql
在安裝你中意的 Python 版本前,須要先安裝一些有用的工具,以下示:數據庫
$ brew install zlib sqlite
複製代碼
pyenv
依賴於 zlib 壓縮算法和 SQLite 數據庫,若是未正確配置,每每會致使構建問題。將這些導出配置命令加入當前的終端窗口執行,確保它們安裝完成。macos
$ 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))
複製代碼
這種使用 pyenv
和 virtualwrapper
管理虛擬環境的方法能夠避免開發環境和運行環境中 Python 版本的不一致出現的苦惱。這是避免混淆的最簡單方法 - 尤爲是你工做的團隊很大的時候。
若是你是初學者,正準備配置 Python 環境,能夠閱讀下 MacOS 中使用 Python 3 文章。 大家有關於 Python 相關的問題嗎,不論是初學者的仍是中級使用者的?給咱們留下評論信息,咱們在下篇文章中會考慮講解。
via: opensource.com/article/19/…
做者:Matthew Broberg 選題:lujun9972 譯者:runningwater 校對:wxy