安裝並使用 Python virtualenv

簡介

virtualenv 是一套 Python 常用的虛擬環境工具,可以用來隔離環境所需的套件。

案例一,避免套件版本衝突 你的專案 Foo 是使用 Flask,另一項專案 Bar 是使用 Django,而這兩個專案很不巧使用了一樣的套件 LibBaz,但 LibBaz 使用的版本卻不一樣。 這時候 virtualenv 就十分有用。

案例二,不想汙染全域空間 你的某個 C++ 專案使用了 conan 這個用 Python 寫的套件管理工具,用 pip 安裝。 你不想要安裝 conan 在全域,因為沒有必要。這時 virtualenv 就能幫助開發者隔離這樣的環境。

案例三,避免 Python 版本衝突 倘若不使用 pyenv 這類 Python 版本管理工具,就得使用 virtualenv 或類似的工具去隔離執行環境。 例如專案 A 使用 Python 3.5.4,而專案 B 使用 Python 3.7.1,都是 Python 3,但你又不想打 python35 或 python37 這樣的別名。 這時候 virtualenv 能幫助開發者隔離 Python 執行版本了。

前提

這篇假設讀者已經對純文字命令列操作有一定程度的熟悉度。

macOS

這章將說明如何在 macOS 安裝 HomebrewPythonvirtualenv

安裝 Homebrew

如果已經安裝過 Homebrew,可以直接跳過

Homebrew (以下簡稱 brew,同時命令名稱預設也是叫 brew) 是一套方便好用的套件管理工具,用來補足 macOS 沒有像 Linux 那樣有 apt, apt-get 或 yum 等官方套件管理工具。 接下來安裝 python 或 pip 時會用到 brew。

到官網,執行官方提供的 shell script。 http://brew.sh

官方提供的安裝腳本,請以 brew 官方提供的為準:

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

安裝 Python

接著說明如何在 macOS 安裝 Python。

pyenv

個人建議使用 pyenv 安裝並切換 Python 版本。 https://github.com/yyuu/pyenv

如果要直接用 brew 安裝 Python 也是可以,但若有不同專案使用了不同版本的 Python,還是建議用 pyenv 安裝 Python。

安裝 pyenv

brew install pyenv

安裝指定版本的 Python

安裝 Python 3.7.1

pyenv install 3.7.1

安裝 Python 2.7.15

pyenv install 2.7.15

(Optional) 獨立安裝 Python 2

Mac OS X 內建了 Python 2,預設也是 Python 2,除非你要另外裝,但不太建議。

brew install python2

接著請調整全域變數 PATH 的路徑排序,如果要優先使用 brew 安裝的 Python 2,則應改成類似下列設定:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH

讓系統先從 /usr/local/bin 開始找 python 在哪。 極度不建議將 python 連結至 Python 3,除非你用的東西通通都不是依賴 Python 2。

(Optional) 獨立安裝 Python 3

brew install python3

安裝 pip

pip 已內建在 Python 2 (>= 2.7.9),或 Python 3 (>= 3.4),但仍然需要自行升級 pip 至最新版。

用 Homebrew 安裝 pip

brew install pip

升級 pip

pip install --upgrade pip

virtualenv

此章將說明如何安裝並使用 virtualenv。

安裝 virtualenv

pip install virtualenv

建立 virtualenv

# 假設當前路徑在 /Users/me/Workspace/myproject/
virtualenv .venv

.venv 是虛擬環境的根目錄名稱,可以隨你的意命名。但按慣例,Python 虛擬環境目錄名稱通常是 .venv, env, venv

啟用 virtualenv

source .venv/bin/activate

退出 virtualenv

deactivate

應用

#!/bin/sh

# 此 shell script 是用來安裝專案開發要用的 Python 環境

VENV_DIR=".venv"

# 檢查 .venv 目錄是否存在
if [ -s "$VENV_DIR" ]; then
  echo "Virtual environment '$VENV_DIR' already exists."
  exit
fi

# 安裝 Python 虛擬環境到 .venv
pip install $VENV_DIR

# 啟用虛擬環境
source $VENV_DIR/bin/active

# 升級虛擬環境裡的 pip
pip install --upgrade pip

# 安裝專案有用到的 packages
pip install Flask

# 退出虛擬環境

deactivate

Windows

這章說明如何在 Windows 安裝 ChocolateyPythonvirtualenv

安裝 Chocolatey

Chocolatey 是一套在 Windows 的套件管理工具,用來補足 Windows 沒有像 macOS 的 Homebrew,或 Linux apt, yum 等套件管理工具的麻煩。

https://chocolatey.org/install 根據指示安裝 Chocolatey。

安裝 Python 3

choco install -y python3

安裝 pip

同 macOS,Python 2.7 以上,或 3.4 以上的版本已自帶 pip,但仍需自行更新 pip 至最新版。

更新 pip

pip install --upgrade pip

如果無法直接用 pip 升級,請改用下列指令:

python -m pip install --upgrade pip

安裝 virtualenv

pip install virtualenv

建立 virtualenv

# 假設當前路徑在 C:\Users\me\Workspace\myproject\
virtualenv .venv

.venv 是虛擬環境的根目錄名稱,可以隨你的意命名。但按慣例,Python 虛擬環境目錄名稱通常是 .venv, env, venv

啟用 virtualenv

.venv\Scripts\activate

如果你遇到無法 activate 的問題,可以參考 https://github.com/cmderdev/cmder/issues/1207

退出 virtualenv

deactivate

相關文章

PowerShell Get-Content 讀檔換行陷阱

最近遇到一個 PowerShell 的陷阱,用 Get-Content 讀檔時,不會保留換行符號。因為 Get-Content 行為是單行回傳物件,多行回傳陣列,而不是單一字串。 一種簡單的 EOL 保留方法是 (Get-Content <path>) -join "`n" #

更多

Unity 5 AssetBundle 基礎

前言 一直以來,Unity 的 AssetBundle 機制與不透明的資訊一直為人所詬病(社群論壇有些批評,例如 asset 序列化管理架構、機制本身就不良,來源就不附上了),以往

更多

Hexo 插件載入地雷

摘要 剛開始學習如何使用 hexo 弄個靜態部落格,也弄了個網域。而在使用插件後,就發生災難了,無法 deploy。此文是記錄為什麼會遇到此問題,以及記錄

更多