從接觸Python以來,一直都是采用 virtualenv 和 virtualenvwrapper 來管理不同項目的依賴環境,通過 workon 、 mkvirtualenv 等命令進行虛擬環境切換,很是愉快。
然而,最近想讓項目能兼容更多的Python版本,例如至少同時兼容 Python2.7 和 Python3.3+ ,就發現采用之前的方式行不通了。
最大的問題在于,在本地計算機同時安裝 Python2.7 和 Python3 后,即使分別針對兩個Python版本安裝了 virtualenv 和 virtualenvwrapper ,也無法讓兩個Python版本的 workon 、 mkvirtualenv 命令同時生效。另外一方面,要想在本地計算機安裝多個Python版本,會發現安裝的成本都比較高,實現方式也不夠優雅。
幸運地是,針對該痛點,已經存在一個比較成熟的方案,那就是 pyenv 。
如下是官方的介紹。
pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.This project was forked from rbenv and ruby-build , and modified for Python.
本文就針對 pyenv 最核心的功能進行介紹。
基本原理
如果要講解 pyenv 的工作原理,基本上采用一句話就可以概括,那就是:修改系統環境變量 PATH 。
對于系統環境變量 PATH ,相信大家都不陌生,里面包含了一串由冒號分隔的路徑,例如 /usr/local/bin:/usr/bin:/bin 。每當在系統中執行一個命令時,例如 python 或 pip ,操作系統就會在 PATH 的所有路徑中從左至右依次尋找對應的命令。因為是依次尋找,因此排在左邊的路徑具有更高的優先級。
而 pyenv 做的,就是在 PATH 最前面插入一個 $(pyenv root)/shims 目錄。這樣, pyenv 就可以通過控制 shims 目錄中的Python版本號,來靈活地切換至我們所需的Python版本。
如果還想了解更多細節,可以查看 pyenv 的文檔介紹及其源碼實現。
環境初始化
pyenv 的安裝方式包括多種,重點推薦采用 pyenv-installer 的方式,原因主要有兩點:
通過 pyenv-installer 可一鍵安裝 pyenv 全家桶,后續也可以很方便地實現一鍵升級;
pyenv-installer 的安裝方式基于 GitHub ,可保證總是使用到最新版本的 pyenv ,并且 Python 版本庫也是最新最全的。
install && config
通過如下命令安裝 pyenv 全家桶。
$ curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
內容除了包含 pyenv 以外,還包含如下插件:
安裝完成后, pyenv 命令還沒有加進系統的環境變量,需要將如下內容加到 ~/.zshrc 中,然后執行 source ~/.zshrc 。
export PATH=$HOME/.pyenv/bin:$PATHeval "$(pyenv init -)"eval "$(pyenv virtualenv-init -)"
新聞熱點
疑難解答