一篇文章完全理解virtualenv
1.virtualenv介紹
在python開發中,我們可能會遇到一種情況,就是當前的專案依賴的是某一個版本,但是另一個專案依賴的是另一個版本,這樣就會造成依賴衝突,而virtualenv就是解決這種情況的,virtualenv通過建立一個虛擬化的python執行環境,將我們所需的依賴安裝進去的,不同專案之間相互不干擾,如下所示。
2.安裝virtualenv
安裝virtualenv比較簡單,無論是在linux系統上還是windows上都可以通過pip來進行安裝,如下:
pip install virtualenv
如果安裝不成功也可以下載virtualenv原始碼package,通過執行setup.py來安裝virtualenv。同時因為python2和python3的不同,因此也有了兩種pip和pip3兩種python包安裝工具,而兩種工具安裝的virtualenv也是不相同的,py2安裝的virtualenv虛擬化出來的python執行環境是python2的,py3安裝的virtualenv預設虛擬化環境則是python3的。
3.virtualenv執行使用
3.1 建立虛擬化環境
使用pycharm來作為本示例的編輯器,選擇python2.7工作環境,新建工程virtualenvDemo,在控制檯中輸入命令:
virtualenv venv
這時候便會在當前的專案中建立venv資料夾,為當前專案的虛擬python執行環境,如下:
我本機此時預設的python環境為python2.7,那麼此時建立的虛擬環境就是以python2.7建立的虛擬化環境,如果需要選擇一個python直譯器來建立虛擬化環境,命令則為:
virtualenv -p /usr/bin/python2.7 venv
此時還需將當前工程的interpreter改為當前的虛擬環境,要不然會不起作用,這個不再詳述。
3.2 啟用
啟用虛擬化環境的命令為:
source venv/bin/activate
啟用後,在控制檯會有一個帶有(venv)的標誌,如下:
3.3安裝依賴
在以上完成之後就可以通過命令pip install 來安裝python包了,這裡安裝python包就不需要root許可權了,直接就可以安裝十分方便。在venv的環境中,使用pip安裝的包都不會再是全域性性的包,只會在當前的虛擬環境中起作用,避免了汙染系統環境。
3.4 退出當前系統環境
在控制檯中輸入命令deactivate後,就會推出當前的venv虛擬化環境。
4.virtualenv其他命令
virtualenv各種其他命令如下:
```
用法:
$ virtualenv [OPTIONS] DEST_DIR
選項:
--version
顯示當前版本號。
-h, --help
顯示幫助資訊。
-v, --verbose
顯示詳細資訊。
-q, --quiet
不顯示詳細資訊。
-p PYTHON_EXE, --python=PYTHON_EXE
指定所用的python解析器的版本,比如 --python=python2.5 就使用2.5版本的解析器建立新的隔離環境。 預設使用的是當前系統安裝(/usr/bin/python)的python解析器
--clear
清空非root使用者的安裝,並重頭開始建立隔離環境。
--no-site-packages
令隔離環境不能訪問系統全域性的site-packages目錄。
--system-site-packages
令隔離環境可以訪問系統全域性的site-packages目錄。
--unzip-setuptools
安裝時解壓Setuptools或Distribute
--relocatable
重定位某個已存在的隔離環境。使用該選項將修正指令碼並令所有.pth檔案使用相當路徑。
--distribute
使用Distribute代替Setuptools,也可設定環境變數VIRTUALENV_DISTRIBUTE達到同樣效要。
--extra-search-dir=SEARCH_DIRS
用於查詢setuptools/distribute/pip釋出包的目錄。可以新增任意數量的–extra-search-dir路徑。
--never-download
禁止從網上下載任何資料。此時,如果在本地搜尋釋出包失敗,virtualenv就會報錯。
--prompt==PROMPT
定義隔離環境的命令列字首。
```
5.綜上
virtualenv就是一個搭建虛擬化的python環境,便於不同的專案在同一臺機器上開發執行。
virtualenv更多的還是適用於本地開發不同的專案,但是在生產環境中還是使用docker給不同的專案建立不同的容器,各自分開執行為好,不宜放在一個單獨的物理機中執行。
原文釋出時間為:2017-03-10
本文作者:夏軒
本文來自雲棲社群合作伙伴“Python中文社群”,瞭解相關資訊可以關注“Python中文社群”微信公眾號
相關文章
- 一篇文章理解Web快取Web快取
- 徹底理解Netty,這一篇文章就夠了Netty
- 理解python函式,這一篇文章就夠了Python函式
- 理解線段樹這一篇文章就夠啦!
- 理解樹狀陣列這一篇文章就夠啦陣列
- 一篇文章理解 golang 中切片與陣列的關係Golang陣列
- 一篇文章助你理解Python2中字串編碼問題Python字串編碼
- 一篇文章助你理解Python3中字串編碼問題Python字串編碼
- virtualenv
- (圖解 HTTP)一篇文章帶你深入理解 IP、TCP 和 DNS圖解HTTPTCPDNS
- 編譯原理入門篇|一篇文章理解編譯全過程編譯原理
- 一篇文章搞定Markdown
- 第一篇文章
- python virtualenv報錯-bash: virtualenv: command not foundPython
- 一篇文章入門NettyNetty
- 一篇文章玩透awk
- 一篇文章基本看懂gradleGradle
- 一篇文章搞懂filebeat(ELK)
- 一篇文章,全面掌握GitGit
- 一篇文章學會 DockerDocker
- 釋出一篇文章001
- 第一篇部落格文章
- 一篇文章學會Vim
- 一篇文章學會GitGit
- 一篇文章瞭解大前端前端
- 一篇文章搞懂 Android 元件化Android元件化
- 一篇文章搞定前端面試前端面試
- 我的第一篇文章
- 第一篇文章測試
- 一篇文章學會Docker命令Docker
- 這是第一篇 learnKu 文章
- 一篇文章帶你搞定HashTable
- 完全理解JavaScript中的this關鍵字JavaScript
- 劃時代:這是一篇完全由GPT-3人工智慧機器人撰寫的文章 - theguardianGPT人工智慧機器人
- javascript深入理解系列文章JavaScript
- 一篇文章弄懂cookie、session和tokenCookieSession
- 一篇文章帶你入門Zookeeper
- 一篇文章搞懂 Activity 啟動模式模式