http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html
虛擬環境是一個將不同項目所需求的依賴分別放在獨立的地方的一個工具,它給這些工程創建虛擬的Python環境。它解決了“項目X依賴於版本1.x,而項目Y需要項目4.x”的兩難問題,而且使你的全局site-packages目錄保持乾淨和可管理。
比如,你可以工作在一個需求Django 1.3的工程,同時維護一個需求Django 1.0的工程。
virtualenv
virtualenv 是一個創建隔絕的Python環境的工具。virtualenv創建一個包含所有必要的可執行文件的文件夾,用來使用Python工程所需的包。
通過pip安裝virtualenv:
$ pip install virtualenv
基本使用
- 爲一個工程創建一個虛擬環境:
$ cd my_project_folder
$ virtualenv venv
virtualenv venv
將會在當前的目錄中創建一個文件夾,包含了Python可執行文件,以及 pip
庫的一份拷貝,這樣就能安裝其他包了。虛擬環境的名字(此例中是 venv
)可以是任意的;若省略名字將會把文件均放在當前目錄。
在任何你運行命令的目錄中,這會創建Python的拷貝,並將之放在叫做 venv
的文件中。
你可以選擇使用一個Python解釋器:
$ virtualenv -p /usr/bin/python2.7 venv
這將會使用 /usr/bin/python2.7
中的Python解釋器。
- 要開始使用虛擬環境,其需要被激活:
$ source venv/bin/activate
當前虛擬環境的名字會顯示在提示符左側(比如說 (venv)你的電腦:你的工程 用戶名$)以讓你知道它是激活的。從現在起,任何你使用pip安裝的包將會放在 ``venv
文件夾中,與全局安裝的Python隔絕開。
像平常一樣安裝包,比如:
$ pip install requests
- 如果你在虛擬環境中暫時完成了工作,則可以停用它:
$ deactivate
這將會回到系統默認的Python解釋器,包括已安裝的庫也會回到默認的。
要刪除一個虛擬環境,只需刪除它的文件夾。(要這麼做請執行 rm -rf venv
)
然後一段時間後,你可能會有很多個虛擬環境散落在系統各處,你將有可能忘記它們的名字或者位置。
其他注意
運行帶 --no-site-packages
選項的 virtualenv
將不會包括全局安裝的包。這可用於保持包列表乾淨,以防以後需要訪問它。(這在 virtualenv
1.7及之後是默認行爲)
爲了保持你的環境的一致性,“冷凍住(freeze)”環境包當前的狀態是個好主意。要這麼做,請運行:
$ pip freeze > requirements.txt
這將會創建一個 requirements.txt
文件,其中包含了當前環境中所有包及各自的版本的簡單列表。你可以使用 “pip list”在不產生requirements文件的情況下,查看已安裝包的列表。這將會使另一個不同的開發者(或者是你,如果你需要重新創建這樣的環境)在以後安裝相同版本的相同包變得容易。
$ pip install -r requirements.txt
這能幫助確保安裝、部署和開發者之間的一致性。
最後,記住在源碼版本控制中排除掉虛擬環境文件夾,可在ignore的列表中加上它。
virtualenvwrapper
virtualenvwrapper 提供了一系列命令使得和虛擬環境工作變得愉快許多。它把你所有的虛擬環境都放在一個地方。
安裝(確保 virtualenv 已經安裝了):
$ pip install virtualenvwrapper
$ export WORKON_HOME=~/Envs
$ source /usr/local/bin/virtualenvwrapper.sh
對於Windows,你可以使用 virtualenvwrapper-win 。
To install (make sure virtualenv is already installed): 安裝(確保 virtualenv 已經安裝了):
$ pip install virtualenvwrapper-win
在Windows中,WORKON_HOME默認的路徑是 %USERPROFILE%Envs 。
基本使用
- 創建一個虛擬環境:
$ mkvirtualenv venv
這會在 ~/Envs
中創建 venv
文件夾。
- 在虛擬環境上工作:
$ workon venv
或者,你可以創建一個項目,它會創建虛擬環境,並在 $PROJECT_HOME
中創建一個項目目錄。當你使用 workon myproject
時,會 cd
-ed
到項目目錄中。
$ mkproject myproject
virtualenvwrapper 提供環境名字的tab補全功能。當你有很多環境,並且很難記住它們的名字時,這就顯得很有用。
workon
也能停止你當前所在的環境,所以你可以在環境之間快速的切換。
- 停止是一樣的:
$ deactivate
- 刪除:
$ rmvirtualenv venv
其他有用的命令
lsvirtualenv
- 列舉所有的環境。
cdvirtualenv
-
導航到當前激活的虛擬環境的目錄中,比如說這樣你就能夠瀏覽它的
site-packages
。 cdsitepackages
-
和上面的類似,但是是直接進入到
site-packages
目錄中。 lssitepackages
-
顯示
site-packages
目錄中的內容。
virtualenv-burrito
有了 virtualenv-burrito ,你就能使用單行命令擁有virtualenv + virtualenvwrapper的環境。
autoenv
當你 cd
進入一個包含 .env
的目錄中,就會 autoenv 自動激活那個環境。
使用 brew
在Mac OS X上安裝它:
$ brew install autoenv
在Linux上:
$ git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv
$ echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc