在使用 Python
開發的過程中,工程一多,難免會碰到不同的工程依賴不同版本的庫的問題;
亦或者是在開發過程中不想讓物理環境里充斥各種各樣的庫,引發未來的依賴災難。
此時,我們需要對於不同的工程使用不同的虛擬環境來保持開發環境以及宿主環境的清潔。
比如 : 需要在Linux服務器上,既可以有Django2.0環境,也能運行Django1.11.11環境,如果用平時的辦法,那么在修改Django2.0的時候如果要修改Django1.11.11,那么要退出在進去,很麻煩.
這里,就要隆重介紹 virtualenv
,一個可以幫助我們管理不同 Python
環境的絕好工具。
virtualenv
可以在系統中建立多個不同並且相互不干擾的虛擬環境。
一 . Linux 下安裝,配置virtualenv
#指定清華源下載pip的包 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv #升級pip工具 pip3 install --upgrade pip
1.下載virtualenv工具 通過物理環境的pip工具安裝 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv 安裝完成后你的linux就多了一個virtualenv命令 2.創建目錄 mkdir Myproject cd Myproject 3.創建虛擬環境venv1 venv2 virtualenv --no-site-packages --python=python3 venv1 調用虛擬環境的命令 --no-site-packages 這是構建干凈,隔離的模塊的參數 --python=python3 這個參數是指定虛擬環境以哪一個物理解釋器為基礎的 最后一個是虛擬環境的名字 會創建這么一個文件夾 4.進入虛擬環境目錄,激活虛擬環境 找到你的虛擬環境目錄bin地下的activate文件 source myenv/venv1/bin/activate - 激活虛擬環境,原理就是修改了PATH變量,path是有順序執行的 echo $PATH 檢查環境變量 which python3 which pip3 檢查虛擬環境是否正常 5.測試安裝2個虛擬環境,venv1,venv2,並且運行2個django不同版本的項目 6.退出虛擬換的命令 deactivate 7. virtualenv是如何創建“獨立”的Python運行環境的呢?原理很簡單,就是把系統Python復制一份到virtualenv的環境,用命令source venv/bin/activate進入一個virtualenv環境時,virtualenv會修改相關環境變量,讓命令python和pip均指向當前的virtualenv環境。
二 . 確保開發環境的一致性
1.假設我們在本地開發環境,准備好了項目+依賴包環境 2.現在需要將項目上傳至服務器,上線發布 3.那么就要保證服務器的python環境一致性
解決方案: 1.通過命令保證環境的一致性,導出當前python環境的包 pip3 freeze > requirements.txt 這將會創建一個 requirements.txt 文件,其中包含了當前環境中所有包及 各自的版本的簡單列表。 可以使用 “pip list”在不產生requirements文件的情況下, 查看已安裝包的列表。 2.上傳至服務器后,在服務器下創建virtualenv,在venv中導入項目所需的模塊依賴 pip3 install -r requirements.txt
三 . 虛擬環境之 virtualenvwrapper
virtualenv
的一個最大的缺點就是:
每次開啟虛擬環境之前要去虛擬環境所在目錄下的 bin
目錄下 source
一下 activate
,這就需要我們記住每個虛擬環境所在的目錄。
並且還有可能你忘記了虛擬環境放在哪。。。
- 一種可行的解決方案是,將所有的虛擬環境目錄全都集中起來,例如/opt/all_venv/,並且針對不同的目錄做不同的事。
- 使用virtualenvwrapper管理你的虛擬環境(virtualenv),其實他就是統一管理虛擬環境的目錄,並且省去了source的步驟。
步驟1 : 安裝virtualenvwrapper
pip3 install virtualenvwrapper
步驟2 :設置Linux的環境變量,每次啟動就加載
把下面兩行代碼添加到 ~/.bashrc文件中 打開文件 vim ~/.bashrc 寫入以下兩行代碼 export WORKON_HOME=~/Envs #設置virtualenv的統一管理目錄 export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的參數,生成干凈隔絕的環境 export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3 #指定python解釋器 source /opt/python34/bin/virtualenvwrapper.sh #執行virtualenvwrapper安裝腳本 讀取文件,使得生效,此時已經可以使用virtalenvwrapper source ~/.bashrc
步驟3 : 基本使用 virtualenvwrapper
創建一個虛擬環境: $ 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 列舉所有的環境。 cdvirtualenv 導航到當前激活的虛擬環境的目錄中,比如說這樣您就能夠瀏覽它的 site-packages 。 cdsitepackages 和上面的類似,但是是直接進入到 site-packages 目錄中。 lssitepackages 顯示 site-packages 目錄中的內容。 完整官網介紹:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html
大白話 :
步驟 : mkvirtualenv 創建一個虛擬環境 workon 進入虛擬環境 : (xuni) [root@localhost ~]# cd 到你所在的虛擬環境中 : (xuni) [root@localhost xuni]# 下載Django pip3 install django(或者django==1.11.11版本) django-admin startproject mysite 創建django項目 ls 查看創建的項目 : bin include lib mysite cd 到你項目所在目錄 : manage.py mysite 再次cd 到mysite 目錄 : __init__.py settings.py urls.py wsgi.py 修改 settings.py文件 vim settings.py : ALLOW_HOSTS=["*"] 保存退出 :wq! 運行Django python3 manage.py runserver 0.0.0.0:8080