1. 程式人生 > >python開發之virtualenv與virtualenvwrapper講解 python開發之virtualenv與virtualenvwrapper講解

python開發之virtualenv與virtualenvwrapper講解 python開發之virtualenv與virtualenvwrapper講解

python開發之virtualenv與virtualenvwrapper講解

 

在使用 Python 開發的過程中,工程一多,難免會碰到不同的工程依賴不同版本的庫的問題;

亦或者是在開發過程中不想讓物理環境裡充斥各種各樣的庫,引發未來的依賴災難。

此時,我們需要對於不同的工程使用不同的虛擬環境來保持開發環境以及宿主環境的清潔。

這裡,就要隆重介紹 virtualenv

,一個可以幫助我們管理不同 Python 環境的絕好工具。

virtualenv 可以在系統中建立多個不同並且相互不干擾的虛擬環境。

Linux下安裝、配置virtualenv

#指定清華源下載pip的包
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
#升級pip工具
pip3 install --upgrade pip

 

複製程式碼
1.安裝virtualenv
pip3 install virtualenv 

2.建立目錄 mkdir Myproject cd Myproject 3.建立獨立執行環境-命名 virtualenv --no-site-packages --python=python3 venv#得到獨立第三方包的環境,並且指定直譯器是python3 4.進入虛擬環境 source venv/bin/activate#此時進入虛擬環境(venv)Myproject 5.安裝第三方包 (venv)Myproject: pip3 install django
==1.9.8 #此時pip的包都會安裝到venv環境下,venv是針對Myproject建立的 6.退出venv環境 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的環境變數,每次啟動就載入virtualenvwrapper

複製程式碼
把下面兩行程式碼新增到 ~/.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
複製程式碼

 

 

 

 

圖解

Mac下建立pycharm

 

第二步:

第三步:此時這裡的Django環境是虛擬環境的版本

第四步:檢查venv下的django版本

第五步:新增已建立的虛擬環境venv的python直譯器,至pycharm,用於建立1.98指定版本的django

第六步:成功啟動1.98版本的django

 

 

在使用 Python 開發的過程中,工程一多,難免會碰到不同的工程依賴不同版本的庫的問題;

亦或者是在開發過程中不想讓物理環境裡充斥各種各樣的庫,引發未來的依賴災難。

此時,我們需要對於不同的工程使用不同的虛擬環境來保持開發環境以及宿主環境的清潔。

這裡,就要隆重介紹 virtualenv,一個可以幫助我們管理不同 Python 環境的絕好工具。

virtualenv 可以在系統中建立多個不同並且相互不干擾的虛擬環境。

Linux下安裝、配置virtualenv

#指定清華源下載pip的包
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
#升級pip工具
pip3 install --upgrade pip

 

複製程式碼
1.安裝virtualenv
pip3 install virtualenv 

2.建立目錄 mkdir Myproject cd Myproject 3.建立獨立執行環境-命名 virtualenv --no-site-packages --python=python3 venv#得到獨立第三方包的環境,並且指定直譯器是python3 4.進入虛擬環境 source venv/bin/activate#此時進入虛擬環境(venv)Myproject 5.安裝第三方包 (venv)Myproject: pip3 install django==1.9.8 #此時pip的包都會安裝到venv環境下,venv是針對Myproject建立的 6.退出venv環境 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的環境變數,每次啟動就載入virtualenvwrapper

複製程式碼
把下面兩行程式碼新增到 ~/.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
複製程式碼

 

 

 

 

圖解

Mac下建立pycharm

 

第二步:

第三步:此時這裡的Django環境是虛擬環境的版本

第四步:檢查venv下的django版本

第五步:新增已建立的虛擬環境venv的python直譯器,至pycharm,用於建立1.98指定版本的django

第六步:成功啟動1.98版本的django