virtualenv是如何建立「獨立」的Python運行環境的呢?html
原理很簡單,就是把系統Python複製一份到virtualenv的環境,用命令source venv/bin/activate進入一個virtualenv環境時,virtualenv會修改相關環境變量,讓命令python和pip均指向當前的virtualenv環境。python
linux提供的虛擬環境工具備virtualenv, pipenvlinux
#指定清華源下載pip的包 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv #升級pip工具 pip3 install --upgrade pip
<br/>shell
####1.安裝python提供的虛擬環境django
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
或者vim
pip3 install virtualenv
####2.建立虛擬環境安裝的目錄bash
mkdir Myproject cd Myproject
####3.經過命令建立虛擬環境app
#建立一個乾淨隔離的虛擬環境,且以python3爲複製本體,虛擬環境名叫作venv1 virtualenv --no-site-packages --python=python3 venv1 --no-site-packages 建立乾淨隔離的python虛擬環境 --python=python3
####4.進入虛擬環境工具
source venv1/bin/activate
檢查是否正確安裝虛擬環境ui
#常看當前物理環境的path變量: [root@localhost opt]# echo $PATH /opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin #激活虛擬環境,再次查看環境變量 (venv1) [root@localhost bin]# echo $PATH /opt/venv1/bin:/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin #檢查是否正確安裝虛擬環境 (venv1) [root@localhost venv1]# which python3 /opt/venv1/bin/python3 (venv1) [root@localhost venv1]# which pip3 /opt/venv1/bin/pip3 (venv1) [root@localhost venv1]# pip3 list Package Version ---------- ------- pip 19.0.3 pytz 2018.9 setuptools 40.8.0 wheel 0.33.1
####5.安裝第三方包
(venv)Myproject: pip3 install django==2 #此時pip的包都會安裝到venv環境下,venv是針對Myproject建立的
####6.退出虛擬環境,再檢查python3解釋器路徑
deactivate
<br/>
如今要在linux中能夠運行,其中運行一個django2,再同時運行一個django1
1.激活venv1 建立django1.11.14 [root@wangdachui opt]# source venv1/bin/activate 2.安裝django pip3 install -i https://pypi.douban.com/simple django==1.11.14 3.建立django項目 運行 django-admin startproject mydjango114 4.建立venv2,建立django2版本 virtualenv --no-site-packages --python=python3 venv2 激活venv2 source venv2/bin/activate 下載django2版本,且建立django2項目 pip3 install -i https://pypi.douban.com/simple django 建立django項目 運行 django-admin startproject mydjango21
虛擬環境工具virtuelenv 必須 找到venv1那個文件夾
而且必須得手動source激活
virtualenv 的一個最大的缺點就是:
每次開啓虛擬環境以前要去虛擬環境所在目錄下的 bin 目錄下 source 一下 activate,這就須要咱們記住每一個虛擬環境所在的目錄。而且還有可能你忘記了虛擬環境放在哪。
- 一種可行的解決方案是,將全部的虛擬環境目錄全都集中起來,例如/opt/all_venv/,而且針對不一樣的目錄作不一樣的事。
- 使用virtualenvwrapper管理你的虛擬環境(virtualenv),其實就是統一管理虛擬環境的目錄,而且省去了source的步驟。
####1.安裝virtualenvwrapper
pip3 install virtualenvwrapper
####2.設置Linux環境變量, 每次啓動就加載virtualenvwrapper
把下面兩行代碼添加到 ~/.bashrc文件中 打開文件 vim ~/.bashrc 寫入如下四行代碼 #設置virtualenv的統一管理目錄 export WORKON_HOME=~/Envs #添加virtualenvwrapper的參數,生成乾淨隔絕的環境 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #指定python解釋器 export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3 #執行virtualenvwrapper安裝腳本 source /opt/python34/bin/virtualenvwrapper.sh 讀取文件,使得生效,此時已經可使用virtalenvwrapper source ~/.bashrc
####3.virtualwrapper基本使用命令
建立一個虛擬環境: $ mkvirtualenv my_django115 這會在 ~/Envs 中建立 my_django115 文件夾。 在虛擬環境上工做:激活虛擬環境my_django115 $ workon my_django115 再建立一個新的虛擬環境 $ mkvirtualenv my_django2 virtualenvwrapper 提供環境名字的tab補全功能。 當有不少環境, 而且很難記住它們的名字時,這就顯得頗有用。 workon還能夠任意中止你當前的環境,能夠在多個虛擬環境中來回切換 workon django1.15 workon django2.0 也能夠手動中止虛擬環境 deactivate 刪除虛擬環境,須要先退出虛擬環境 rmvirtualenv my_django115
####4.其餘經常使用命令
#列舉全部的環境。 lsvirtualenv # 導航到當前激活的虛擬環境的目錄中,好比說這樣您就可以瀏覽它的 site-packages 。 cdvirtualenv # 和上面的相似,可是是直接進入到 site-packages 目錄中。 cdsitepackages # 顯示 site-packages 目錄中的內容。 lssitepackages
完整官網介紹:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html