Virtualenv 可用於建立獨立的Python環境,是一個非常好的virtual python environment builder,他最大的好處是,可以讓每一個python專案單獨使用一個環境,而不會影響python系統環境,也不會影響其他專案的環境。在這些環境裡面可以選擇不同的Python版本或者不同的Packages,並且可以在沒有root許可權的情況下在環境裡安裝新套件,互相不會產生任何的影響。
python 虛擬環境搭建
參考:http://www.cnblogs.com/wilber2013/p/4774022.html
-
virtualenv documentation: https://virtualenv.pypa.io/en/latest/
-
virtualenvwrapper documentation: http://virtualenvwrapper.readthedocs.org/en/latest/
-
http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html
-
virtualenv 中文文件地址 : http://virtualenv-chinese-docs.readthedocs.io/en/latest/#
前言
由於Python的版本眾多,還有Python2和Python3的爭論,因此有些軟體包或第三方庫就容易出現版本不相容的問題。同時在python開發中,我們可能會遇到一種情況,就是當前的專案依賴的是某一個版本,但是另一個專案依賴的是另一個版本,這樣就會造成依賴衝突。
對於上面的問題,已經有很多現成的個工具可以解決。根據解決上面問題的方法,這些工具大概可以分為兩類:
- Python 版本環境切換工具
- 特定Python版本虛擬環境切換工具
Python 版本環境切換工具
Python版本環境切換工具的作用就是讓多個不同版本的Python可以在系統上共存。並且提供簡單的命令來支援不同Python版本之間的切換。
工具 |
介紹 |
pyenv |
目前最流行的 python版本環境切換工具,但是不支援Windows |
pywin |
Windows 上pyenv 的替代品,但是功能相對pyenv比較少 |
py.exe |
Python 3.3 版本以後Windows系統自帶的啟動工具(Python Launcher for Windows),可以直接在命令列中使用 |
特定 Python 版本虛擬環境切換工具
簡單的說,虛擬環境切換工具就是可以根據當前使用的Python版本環境來建立多個虛擬的Python環境。這些虛擬的環境之間相互獨立,可以安裝各個環境所需的Python包。
工具 |
介紹 |
virtualenv |
目前最流行的 python 虛擬環境配置工具 |
virtualenvwrapper |
使用shell開發,是對virtualenv的一個封裝,簡化了virtualenv命令的使用,並且進行了一些功能擴充套件 |
virtualenvwrapper-win |
使用Windows batch shell開發的virtualenvwrapper |
venv |
Python 3.3 版本以後自帶的虛擬環境工具,僅支援 python 3.3 和以後版本 |
pywin
現在看看Windows上Python版本環境切換工具 pywin。
對於pywin的工作原理就可以簡單的理解為,通過pywin提供的命令可以簡單的以設定環境變數的方式決定優先使用特定版本的Python。
安裝
對於pywin,我們可以使用原始碼、easy_install和pip三種方式進行安裝,關於這些安裝方式的關係,請參考前一篇文章。
下面通過pip來安裝pywin:
常用命令
安裝完成之後就看看pywin的常用命令。
"pyassoc"和"pywin genlaunchers"是兩個配置相關的命令。我本機安裝了2.7和3.4兩個版本的Python,預設環境變數指向2.7,配置完成後就會就會在2.7目錄中生成本機安裝所
有Python版本的launcher。
配置完成之後,就可以通過pywin進行不同版本之間的Python切換了。
1. 開啟環境變數PAHT中第一個Python版本環境
C:\Users\tianw1>pywin Python 2.7.7 (default, Jun 1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit()
2. 開啟Python 3.4
C:\Users\tianw1>pywin -3.4 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit()
3. 將Python 3.4設定為預設的Python執行環境,根據輸出也可以看出,其實就是將Python 3.4目錄放在環境變數PATH的前面位置
C:\Users\tianw1>pywin setdefault 3.4 Setting default python for active session to: 3.4 C:\Python34;C:\Python34\Scripts -- now at front of PATH # 由於Python 3.4中沒有安裝pywin,所以會報錯 C:\Users\tianw1>pywin 'pywin' is not recognized as an internal or external command, operable program or batch file. C:\Users\tianw1>python Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit()
4. 即使上面通過pywin將預設Python版本環境設為3.4,但是由於檔案的查詢還是先本地,然後環境變數PATH。所以,下面方式使用的還是2.7版本,同時也可以再通過pywin將2.7設定為預設Python版本環境。
C:\>cd Python27 C:\Python27>python Python 2.7.7 (default, Jun 1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> exit() C:\Python27>pywin setdefault 2.7 Setting default python for active session to: 2.7 C:\Python27;C:\Python27\Scripts -- now at front of PATH C:\Python27>
virtualenvwrapper-win
在Windows環境中使用"virtualenvwrapper-win"還是比較方便的。
安裝。同樣使用pip進行安裝:pip install virtualenvwrapper-win
常用命令。安裝完成之後,就可以直接使用"virtualenvwrapper-win"提供的命令來建立虛擬環境了。
1. 新建虛擬環境:mkvirtualenv env_name
C:\Users\tianw1>mkvirtualenv py27_dev1 New python executable in py27_dev1\Scripts\python.exe Installing setuptools, pip, wheel...done. (py27_dev1) C:\Users\tianw1>pip list pip (7.1.2) setuptools (18.2) wheel (0.24.0)
注意,預設情況虛擬環境不會自通引用原始Python環境中的軟體包,但是可以通過"--system-site-packages"引數來使虛擬環境引用原始Python環境中的軟體包。
C:\Users\tianw1>mkvirtualenv --system-site-packages py27_dev2 New python executable in py27_dev2\Scripts\python.exe Installing setuptools, pip, wheel...done. (py27_dev2) C:\Users\tianw1>pip list
2. 離開虛擬環境:deactivate
(py27_dev1) C:\Users\tianw1>deactivate C:\Users\tianw1>
3. 列出虛擬環境列表:workon 或lsvirtualenv
C:\Users\tianw1>workon Pass a name to activate one of the following virtualenvs: ============================================================================== py27_dev1 py27_dev2 C:\Users\tianw1>lsvirtualenv dir /b /ad "C:\Users\tianw1\Envs" ============================================================================== py27_dev1 py27_dev2 C:\Users\tianw1>
4. 刪除虛擬環境:rmvirtualenv env_name
virtualenv
virtualenv 通過建立一個虛擬化的python執行環境,將我們所需的依賴安裝進去的,不同專案之間相互不干擾。然後在每個環境中安裝需要的軟體包(配合 pip 使用),這一系列的環境是相互隔離的。作為一個獨立的環境就不容易出現版本問題,還方便部署。
virtualenv安裝
VirtualEnv 用於在一臺機器上建立多個獨立的 Python 執行環境,VirtualEnvWrapper 為VirtualEnv 提供了一些便利的命令列上的封裝。
為什麼要用virtualenv ?
- 隔離專案之間的第三方包依賴,如A專案依賴django1.2.5,B專案依賴django1.3。
- 為部署應用提供方便,把開發環境的虛擬環境打包到生產環境即可,不需要在伺服器上再折騰一翻。在伺服器上都不用安裝virtualenv,直接將virtualenv建立的目錄拷貝到伺服器,修改路徑,進行虛擬環境遷移就可以用了。
- 還可以用在沒有root許可權的python環境配置上,如果沒有root許可權,可以先自己搞一個virtualenv,再在virtualenv中使用pip安裝。(系統中沒有pip,並且也沒有root許可權使用sudo apt-get安裝)
虛擬環境中安裝的庫的位置在哪 ?
在虛擬環境中安裝的庫在 env/Lib/site-packages/目錄裡,而不是在系統的python的Lib/site-packages目錄裡,這就是為什麼虛擬環境是分開的。
Note:virtualenv 建立的虛擬環境與主機的 Python 環境完全無關,你主機配置的庫不能在 virtualenv 中直接使用。你需要在虛擬環境中利用 pip install 再次安裝配置後才能使用。
安裝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的。
網速較好可以通過 pip 來安裝, 系統沒有 pip 的請參考 pip2 或 pip3
pip install virtualenv
pip install setuptools # 如果提示安裝就執行這個
建立
mkdir myproject 建立專案資料夾 myproject
cd myproject 進入專案目錄
virtualenv myproject_ENV 建立虛擬環境 myproject_ENV
這時候會發現在 myproject 目錄下新增了一個 myproject_ENV 的資料夾。
使用
cd myproject_ENV 進入虛擬環境目錄 myproject_ENV
source ./bin/activate 啟用
這時候在命令列的最左邊會顯示該虛擬環境的名稱。不妨使用下面的命令檢視一下變化:
which python
which pip
pip list
如果想要退出虛擬環境,使用這個命令就可以了:deactivate
virtualenv 的基本使用
$ virtualenv venv 建立虛擬環境
$ virtualenv -p /usr/bin/python2.7 venv 為環境指定Python直譯器:
$ source venv/bin/activate 啟用虛擬環境
$ deactivate 停止虛擬環境。退出虛擬環境
刪除虛擬環境 直接刪除目錄即可
啟用虛擬環境之後就可以通過命令pip install 來安裝python包了,這裡安裝python包就不需要root許可權了,直接就可以安裝十分方便。
在venv的環境中,使用pip安裝的包都不會再是全域性性的包,只會在當前的虛擬環境中起作用,避免了汙染系統環境。
執行pip帶 –no-site-packages 選項的 virtualenv 將不會包括全域性安裝的包. 這可用於保持包列表乾淨, 以防以後需要訪問它. (這在 virtualenv 1.7及之後是預設行為)
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 定義隔離環境的命令列字首。
使用
New python executable in /home/MTP/bin/python
Installing setuptools, pip, wheel...done.
[root@localhost home]# ls # 會在當前目錄生成一個目錄
MTP
[root@localhost home]# cd MTP/
[root@localhost MTP]# ls
bin include lib lib64 pip-selfcheck.json
[root@localhost MTP]# source ./bin/activate # 啟動虛擬環境後, 此時命令列會多一個(MTP)
(MTP) [root@localhost MTP]# pip freeze # MTP為虛擬環境名稱, 接下來所有模組都只會安裝到該目錄
(MTP) [root@localhost MTP]# pip list
pip (9.0.0)
setuptools (28.7.1)
wheel (0.30.0a0)
(MTP) [root@localhost MTP]# deactivate # 退出虛擬環境, 將回到系統預設的Python直譯器環境
[root@localhost MTP]#
刪除
刪除一個虛擬環境, 只需要刪除它的目錄. 有必要請執行( rm -rf venv )
擴充套件包 Virtualenvwrapper
為了使用virtualenv更方便,可以藉助 virtualenvwrapper。Virtualenvwrapper 的作用是:更方便的建立/啟用/管理/銷燬虛擬環境。
Virtaulenvwrapper是virtualenv的擴充套件包,它提供了一系列命令用於更方便管理虛擬環境,它可以做:
1. 將所有虛擬環境整合在一個目錄下
2. 管理(新增,刪除,複製)虛擬環境
3. 切換虛擬環境 …
virtualenvwrapper 提供環境名字的tab補全功能.
$ sudo pip install virtualenvwrapper 安裝 virtualenvwrapper
$ source /usr/local/bin/virtualenvwrapper.sh 載入 virtualenvwrapper
建立虛擬環境
預設建立的虛擬環境位於 ~/.virtualenvs ,可以通過環境變數 $WORKON_HOME 來定製。
$ mkvirtualenv test2-env 建立 test2-env 虛擬環境後,會自動啟用環境,注意看Shell提示符的改變:
(test2-env)CL-USER> test2-env$
$ mkvirtual [環境名稱] 建立 虛擬環境
$ lsvirtualenv 列出所有虛擬環境
$ workon test2-env 啟用 test2-env 虛擬環境
$ cdvirtualenv 進入到當前啟用的虛擬環境的目錄中
$ cdsitepackages 進入到當前啟用的虛擬環境的 site-packages 目錄
$ lssitepackages 列出 site-packages 目錄的所有軟體包
$ deactivate 停止虛擬環境。離開虛擬環境
$ rmvirtualenv test2-env 刪除虛擬環境
安裝
[root@localhost MTP]# echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
[root@localhost MTP]# source ~/.bashrc
[root@localhost MTP]# source $(find /usr -type f -name virtualenvwrapper.sh)
此時virtualenvwrapper就可以使用了; 對於Windows, 可以使用 virtualenvwrapper-win
或者安裝:sudo easy_install virtualenvwrapper
此時還不能使用virtualenvwrapper,預設virtualenvwrapper安裝在/usr/local/bin下面,實際上你需要執行virtualenvwrapper.sh檔案才行。
先別急,開啟這個檔案看看,裡面有安裝步驟,我們照著操作把環境設定好。
建立目錄用來存放虛擬環境
mkdir $HOME/.virtualenvs
在~/.bashrc中新增行: export WORKON_HOME=$HOME/.virtualenvs
在~/.bashrc中新增行:source /usr/local/bin/virtualenvwrapper.sh
執行: source ~/.bashrc
此時virtualenvwrapper就可以使用了。
Linux 下的 Python 多版本管理(pyenv)
From: https://my.oschina.net/lionets/blog/267469
pyenv可以幫助你在一臺開發機上建立多個版本的python環境, 並提供方便的切換方法。
virtualenv則提供了一種功能, 就是將一個目錄建立為一個虛擬的python環境, 這樣的話, 使用者可以建立多個虛擬環境, 每個環境裡面的python版本可以是不同的, 也可以是相同的, 而且環境之間相互獨立。
如果解釋得還不是很清楚的話,我們舉例說明。
首先我們可以用pyenv 安裝多個python 版本, 比如安裝了2.5, 2.6, 3.3 三個版本。 使用者可以隨意切換當前預設的python版本。 但這時候, 每個版本的環境仍是唯一的, 如果我們想在環境中安裝一些庫的話, 還是會導致這個版本的環境被修改。 這個時候, 如果我們用virtual env去建立虛擬環境, 就可以完全保證系統路徑的乾淨。無論你在虛擬環境中安裝了什麼程式, 都不會影響已安裝版本的系統環境。
Python3 venv 建立虛擬環境
https://docs.python.org/3/library/venv.html
Python3.3以上的版本通過venv模組原生支援虛擬環境,可以代替Python之前的virtualenv。該venv模組提供了建立輕量級“虛擬環境”,提供與系統python的隔離支援。每一個虛擬環境都有其自己的Python二進位制(允許有不同的Python版本創作環境),並且可以擁有自己獨立的一套Python包。需要注意的是,在Python3.3中使用”venv”命令建立的環境不包含”pip”,你需要進行手動安裝。在Python3.4中改進了這一個缺陷。
重建Python環境
凍結環境
所謂 凍結(freeze) 環境,就是將當前環境的軟體包等固定下來:
$ pip freeze > requirements.txt$
$ cat requirements.txt
重建環境
重建(rebuild) 環境就是在部署的時候,在生產環境安裝好對應版本的軟體包,不要出現版本相容 等問題.
$ pip install -r requirements.txt 配合pip,可以批量安裝對應版本的軟體包,快速重建環境,完成部署
後記
使用Python虛擬環境的另一個好處是可以方便的進行部署,對於每個虛擬環境,都可以通過下面的命令很方便的進行環境部署:
- pip freeze > requirements.txt 將包依賴資訊儲存在requirements.txt檔案
- pip install -r requirements.txt 會自動從網上下載並安裝所有包
virtualenv就是一個搭建虛擬化的python環境,便於不同的專案在同一臺機器上開發執行。
virtualenv更多的還是適用於本地開發不同的專案,但是在生產環境中還是使用docker給不同的專案建立不同的容器,各自分開執行為好,不宜放在一個單獨的物理機中執行。
相關文章
- Python搭建虛擬環境Python
- python虛擬環境搭建Python
- python virtualenv虛擬環境搭建Python
- 虛擬環境搭建
- python虛擬開發環境搭建Python開發環境
- 虛擬機器arm虛擬環境搭建虛擬機
- KVM虛擬化環境搭建
- CentOS 7.6虛擬環境搭建CentOS
- 虛擬環境搭建相關
- Python虛擬環境Python
- 建立python虛擬環境Python
- Python - 虛擬環境 venvPython
- 建立 Python 虛擬環境Python
- 使用Python虛擬環境Python
- python虛擬環境--virtualenvPython
- Ubuntu python虛擬環境UbuntuPython
- 虛擬機器環境搭建之vagrant虛擬機
- 虛擬機器配置和環境搭建虛擬機
- 建立Python虛擬環境——下Python
- python的虛擬環境virtualenvPython
- Python 虛擬環境全知道Python
- 【PYTHON3】虛擬環境Python
- Python虛擬環境介紹Python
- python下多環境開發(虛擬環境)Python
- 安裝python虛擬環境並配置虛擬環境以及安裝scrapy模組Python
- python多版本與虛擬環境Python
- Python 外掛虛擬環境支援Python
- python 虛擬環境 virtualenv virtualenvwrapperPythonAPP
- windows安裝Python虛擬環境WindowsPython
- Python3虛擬環境--venvPython
- Pipenv虛擬環境
- Vagrant+VirtualBox搭建虛擬開發環境開發環境
- 【RAC】使用VMware虛擬機器搭建RAC環境虛擬機
- (全)Python 的虛擬環境構建和jupyter notebook 中虛擬環境切換Python
- Sublime Python3 虛擬環境配置Python
- Win 10 安裝 Python 虛擬環境Python
- Python3.8 安裝虛擬環境Python
- Django(2)python虛擬環境virtualenvwrapperDjangoPythonAPP