Python/虛擬環境
虛擬環境工具可為 Python 應用程式創建一個隔離的工作空間。 虛擬環境的優勢在於,可在本地安裝模塊、導出工作環境,並在其中執行 Python 程序。
概述
虛擬環境是安裝了一些二進制文件和 shell 腳本的目錄。 二進制文件通常是用於執行腳本的 python 和用於安裝模塊的 pip。 虛擬環境中也包含了用於激活環境的 shell 腳本(bash、csh 和 fish 均可用)。 虛擬環境本質上是模擬了一個安裝了 Python 和所有所需的模塊的完整系統,同時不會影響到任何運行此應用程式的系統。
Pipenv 於 2017 年發布,提供了上述所有工具的管理功能——管理 python 解釋器所在的虛擬環境、包/模塊和依賴關係及其激活和 Pipfiles 中可重現的版本鎖定。
安裝
Python 3.3+ 版本提供了一個叫做 venv 的模塊。 對於使用早於此版本的 Python 的應用程式,必須使用 virtualenv。
軟體包
從下面的軟體包中選一個進行安裝即可開始使用 Python 虛擬環境:
- Python 3.3+:python包
- Python 3:python-virtualenv包
Pipenv:
- Python 3:python-pipenv包
使用方法
上述三種工具的工作流程基本相似。
創建虛擬環境
在項目目錄中使用 venv 或 virtualenv 創建一個虛擬環境。
請確保將虛擬環境目錄從版本控制系統中排除——一份 pip freeze 的拷貝即可重建這個環境。
venv
此工具由 python包(3.3+)提供:
$ python -m venv envname
virtualenv
python-virtualenv包 提供了可用於 Python 3 的 virtualenv。
$ virtualenv envname
激活虛擬環境
使用目錄中提供的 shell 腳本以激活或停用虛擬環境:
$ source envname/bin/activate
虛擬環境激活後,命令行解釋器的提示符前會顯示類似下面的虛擬環境名稱:
(envname) $
在虛擬環境中可正常使用 pip 安裝模塊和運行腳本。
運行如下的命令即可退出虛擬環境(此命令由 bin/activate 提供):
(envname) $ deactivate
Python 版本
默認情況下,虛擬環境由系統上安裝的 Python 創建。
其中的 bin/python 是一個連結到系統上所安裝的 python 的符號連結。
用 ls 查看可得到類似如下的輸出結果:
$ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 15 Jan 29 18:48 envname/bin/python -> /usr/bin/python
對於 virtualenv,可以使用 -p 或 --python 選項在虛擬環境中使用其他版本的 Python:
$ virtualenv -p 3.8 envname $ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 18 Jan 29 18:48 envname/bin/python -> /usr/bin/python3.8
也可以使用 pypy3包:
$ virtualenv -p pypy3 envname
virtualenvwrapper
virtualenvwrapper 提供了更自然的命令行交互(一些用於創建、激活以及刪除虛擬環境的命令)以管理虛擬環境。 該軟體包是對 python-virtualenv包 的包裝。
安裝
安裝 python-virtualenvwrapper包 軟體包,並在 ~/.bashrc 中添加下面的配置:
~/.bashrc
export WORKON_HOME=~/.virtualenvs source /usr/bin/virtualenvwrapper.sh
source /usr/bin/virtualenvwrapper.sh 會影響 shell 的啟動速度。
使用 source /usr/bin/virtualenvwrapper_lazy.sh 可解決此問題,在這種情況下,只有當 virtualenvwrapper 被首次調用時才會加載。
重新打開 shell 以應用更改。
WORKON_HOME 目錄會自動創建。
基本用法
使用方法和擴展功能請參見 virtualenvwrapper 文檔。
創建虛擬環境(除了 -a、-i、-r 和 -h,其餘的命令行參數都會被直接傳遞給 virtualenv,這裡同樣可以使用 -p 來指定 Python 版本):
$ mkvirtualenv envname
激活虛擬環境:
$ workon envname
在虛擬環境中安裝包(模塊),以 Django 為例:
(envname) $ pip install django
停用虛擬環境:
(envname) $ deactivate
Pipenv
pipenv 提供單個、囊括了上述工具的所有功能的程序,實現了更好的命令行交互管理。
安裝
安裝 python-pipenv包 軟體包。
基本用法
所有命令都可在項目目錄中執行,pipenv 還會檢測並定位 virtualenv,使用特定的虛擬解釋器執行等。