用virtualenv管理python3運行環境


1. 簡介

virtualenv可以用來管理互不干擾的獨立python虛擬環境,在有些場景下非常有用,例如:

  • 你有兩個python項目,一個是python2.7的,另一個是python3的,可以創建兩個虛擬環境。
  • 你有兩個python項目,都依賴與一個module的不同版本,可以創建兩個不同的虛擬環境,里面安裝這個module的不同版本。

virtualenvwrapper在virtualenv的基礎上提供了一些更方便的命令。

2. 安裝

sudo pip install virtualenv
sudo pip install virtualenvwrapper

在~/.bashrc里面加上:

export WORKON_HOME=/home/dev/virtualenv  #你創建的虛擬環境所放置的目錄
source /usr/local/bin/virtualenvwrapper.sh

然后source ~/.bashrc,就可以使用了

3. 管理環境

首先我們創建一個python3的虛擬環境,當然系統里得先裝好了python3。

mkvirtualenv -p python3 py3env

-p 后面的參數指定了python3(也有可能要換成python3.2/python3.4,具體要看你系統里面/use/bin/里面的文件是什么名字),如果去掉這個參數,就會使用系統默認的python。最后一個參數py3env是創建的這個環境的名字。

執行完了之后,會自動切換到這個新創建的虛擬環境。我們會發現命令行提示符會發生改變,例如在我的機器上:從 (py3env)user@vm-ubuntu1204 變成了 (py3env)user@vm-ubuntu1204 ,最前面多了這個虛擬環境的名字。

其他一些常用命令:

deactivate                # 退出當前虛擬環境
workon [虛擬環境名稱]       # 使用某個虛擬環境
rmvirtualenv [虛擬環境名稱] # 刪除某個虛擬環境
lsvirtualenv              # 列出所有虛擬環境

4. 包管理

在實際使用中,我們會用pip來管理python的包,而在虛擬環境里的包是和系統里的包分離開的,虛擬環境之間的包也是隔離開的。

在生產環境中,我們可能需要將程序部署在很多機器上,如果能方便地把依賴的包同步到所有機器上能省去很多時間。

可以在開發機器上執行下面這個命令,來列出所有的包並保存到packages.txt,其中-l參數是只列出當前虛擬環境的包:

pip freeze -l > packages.txt

然后在部署到生產環境的時候,把packages.txt也復制到每個機器,並在每個機器上執行:

pip install -r packages.txt

5. 在pycharm中使用虛擬環境

在設置里面Project Interpreter,點擊齒輪那個按鈕,選擇"Add Local",然后選擇剛才創建的虛擬環境的路徑。如下圖所示:

6. 在虛擬環境中設置默認命令

有些時候,我們希望在進入虛擬環境之后執行某些命令,或者設置一些環境變量。

例如:在django運行的時候,可以通過環境變量DJANGO_SETTINGS_MODULE來指定配置文件的路徑。

我們可以在虛擬環境目錄下面創建文件bin/postactivate,並在文件里面寫入:

export DJANGO_SETTINGS_MODULE=config.django.production

這個文件會在每次進入這個虛擬環境的時候被執行,這樣這個參數就會被設置了。

除了postactivate以外,其他階段也可以有這樣的設置,參看:https://virtualenvwrapper.readthedocs.org/en/latest/scripts.html

7. 參考鏈接

兩篇比較好的博文:

http://www.oschina.net/question/54100_26395
http://liuzhijun.iteye.com/blog/1872241

postactivate的用法:

http://stackoverflow.com/a/11134336

官方文檔:

https://virtualenvwrapper.readthedocs.org/en/latest/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM