Python 版本及虛擬環境管理

MirrorTan發表於2020-03-22

實際上,Python 環境的管理可分為兩部分:

  • 系統 Python 版本的管理
  • 工作環境 Project 中的 Python 環境的管理

因 Python 大小版本眾多,同時在一個工程專案中使用到的第三方庫也較多,因此有各種 Python 環境管理的工作。

1 Python 版本管理

可通過 pyenv 來實現 Python 版本的管理 ~ pyenv 並不是管理虛擬環境的工具,但可配合 pipenv 等工具一同使用。

pyenv 的工作原理是通過在 shims 目錄中建立 Python 直譯器的偽造應用,當系統尋找 python 時,它會先在 shims 目錄中找對應的假版本,傳遞命令到 pyenv 中。pyenv 再根據環境變數、.python-version 檔案及全域性預設設定資訊來判斷該執行的版本。

Mac 電腦可通過 brew install pyenv 安裝 pyenv,使用 pyenv 安裝 Python:

pyenv install 3.6.10
# 國內可指定安裝的源以加快速度
mkdir -p ~/.pyenv/cache
brew install wget         # 如無 wget 可使用 brew 安裝
v=3.7.3;wget https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
$ pyenv versions          # 檢視當前有的 Python 版本
* system (set by /Users/***/.pyenv/version)
  3.6.10

安裝是需指定版本號,關於 .pyenv/cache 的設定可參考 Prasanta 的部落格。

2 Python 包管理

Python 包安裝本質上就是從 Python Package Index 中下載並安裝第三方庫,最基礎的工具如 pip, Easy Install,也有更進一步的工具如 virtualenv, venv, pipenv 等。

2.1 設定國內源

因各種原因,使用預設的 pypi 安裝第三方庫時比較緩慢,可通過設定國內映象源來解決這一問題。

通過編輯 ~/.pip/pip.conf 檔案進行設定:

[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com

一次性使用的源 pip install -i http://mirrors.aliyun.com/pypi/simple/ flask.

此外,可以在 ~/.bashrc 中設定 export PIP_REQUIRE_VIRTUALENV=true 強制要求 pip install 將包安裝在啟用的虛擬環境中,或在 ~/.pip/pip.conf 中新增 require-virtualenv = true

2.2 Pipenv

Python 中的第三方庫管理工具中,Pipenv 使用體驗好,可替代 pipvirtualenv 兩個工具。

2.2.1 Install

在 Mac 中可通過 brew 安裝 pipenv

brew install pipenv

2.2.2 Usage

使用 pipenv 進行工作的一般流程為:

cd [PROJECT PATH]
pipenv --three      # 基於 Python 3 建立虛擬環境
pipenv --python 3.6 # 指定 Python 版本建立虛擬環境
# do something
exit                # 退出當前環境
pipenv shell        # 進入工作環境
# do something
exit                # 退出當前環境
pipenv --rm         # 刪除當前虛擬環境

Pipenv 會預設建立 PipfilePipfile.lockPipfile 包含所有已安裝軟體包的列表 ~ 並且可以進行不同開發環境的管理(便於人閱讀);Pipfile.lock 中包含當前環境維護的具體內容。

同時,在 pyenv 已安裝的情況下,可自動安裝對應 Python 版本。

此外,當使用 Git 進行管理時,將 Pipfile, Pipfile.lock 納入版本管理,當克隆倉庫後,只要使用 pipenv install 即可完成環境的配置。

2.2.3 Setting

預設情況下,使用 pipenv 管理的虛擬環境位於使用者的主目錄下,可通過在 .bashrc/.zshrc 中設定 export PIPENV_VENV_IN_PROJECT=1 讓生成的虛擬環境位於工程主目錄內。

在工程環境中,可在主目錄中建立 .env 檔案,當進入虛擬環境中時,會將 .env 檔案中的變數載入工作環境中。

3 小結

因此,綜合而言,推薦使用 pyenv 來進行 Python 版本管理,使用 pipenv 來進行工程虛擬環境及包管理。

4 參考資料

  1. Pyenv docs, 2020/3/15.
  2. Pipenv 官網, 2020/3/15.
  3. pyenv 安裝配置與國內映象加速 結合 virtualenv, Prasanta, 2020/3/15.
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章