python虛拟環境-virtual environment
轉自或參考:python虛拟環境—virtual environment
https://www.jianshu.com/p/2fdb53825d35
作業系統:ubuntu16.04
舉個例子,tensorflow(tf)是一個十分流行的python機器學習庫,你現在手裡有兩個tf項目,其中項目A需要使用<code>python2.7 + f1.2</code>,項目B需要使用<code>python2.7 + tf1.6</code>.這兩個項目你得同時進行,怎麼辦?
愚蠢的辦法是需要運作項目A時,将python2.7中的tf1.6解除安裝掉,安裝tf1.2;需要運作項目B時,将python2.7中的tf1.2解除安裝掉,安裝tf1.6。如果是單個子產品還好,但是tf的不同版本又依賴于python中的其他已安裝子產品,而且tf1.2和tf1.6對依賴子產品有不同的版本要求,那麼轉換一次得解除安裝安裝好幾個子產品,是不是很爆炸?
課題組裡幾個同門共用一台伺服器,每個人擁有一個系統賬戶,其中隻有一個人擁有root權限,裡面每個人都需要使用python跑程式,而且每個人對python版本以及python子產品的版本都有不同需求,很多人又沒有root權限,如何解決?
使用python的虛拟環境可以輕松解決上面的問題!
python虛拟環境是一個隔離/獨立的python開發環境,和系統python環境可以完全隔離,互不相關,相當于多了一個python開發環境。而且你在python虛拟環境中的開發過程和使用系統python一模一樣,你可以在你建立的python虛拟環境中使用pip工具安裝任何你需要的子產品,該子產品和系統python環境完全不相關。虛拟環境的這個特點就能解決上面的問題了。
python有兩個子產品可以用于建立和管理python虛拟環境:
venv;
virtualenv;
其中,venv子產品在python3.3以上的版本可以使用,而virtualenv在python2.7+和python3.3+都可以使用。
預設的系統python中是沒有安裝以上兩個工具的,需要使用以下指令安裝:
安裝好之後,就可以使用這兩個工具安裝python虛拟環境了。
我的系統python版本有python2.7和python3.5,虛拟環境的版本隻能是系統中已有的python版本。使用virtualenv安裝虛拟環境的指令如下:
什麼參數都不指定的話,它會使用<code>/usr/bin/python</code>路徑下的python解釋器版本,即python2.7。是以會預設安裝python2.7虛拟環境,<code>/home/yan/env</code>表示虛拟環境的安裝路徑。
如果你要安裝的是python3.5的虛拟環境,可以這樣:
一般情況下,上面兩條指令就夠了,這樣安裝得到的python虛拟環境和系統python環境是完全隔離的。
更多的指令選項可以在指令行中直接輸入<code>virtualenv</code>指令擷取。
venv隻有python3可以使用,是以隻能建立python3的虛拟環境,建立指令如下:
其中,<code>python3 -m venv</code>是死指令,最後的安裝路徑自己指定。
注意:以上兩種安裝方式在安裝虛拟環境的同時也自動安裝了pip工具。
安裝好虛拟環境之後,每次使用該虛拟環境前需要使用<code>source</code>指令激活它。假設前面我在<code>/home/yan/env3/</code>目錄下安裝了python3.5的虛拟環境,現在我使用以下指令激活它:
激活之後,在指令行提示符前面會有<code>(env3)</code>的提示,表示目前你處的python虛拟環境,比如我電腦的情況:
現在你可以在激活環境中幹任何事情,比如使用pip指令在你新的python虛拟環境中安裝子產品:
或者執行python腳本。
使用完該虛拟環境之後,你需要在指令行輸入<code>deactivate</code>指令來退出該虛拟環境:
之後就回到了正常的系統python環境中。
由于你建立該虛拟環境的目的是為了跑某個項目的程式,現在該項目做完了,不需要該虛拟環境了,你可以把該虛拟環境直接删除,如何删?
直接将建立虛拟環境時生成的檔案夾删掉,就這麼簡單。比如我要把我剛才建立的env3虛拟環境删除:
在删除虛拟環境前記得一定得先退出該虛拟環境。
python虛拟環境的好處是:每個虛拟環境之間,以及虛拟環境和系統環境之間是完全隔離的,不同虛拟環境中,你可以安裝不同版本的子產品,就仿佛你可以同時擁有N多個不同的python開發環境。
唯一麻煩的一點是:每次進入某個虛拟環境之前,都要使用<code>source</code>指令激活。每次使用完,都要使用<code>deactivate</code>指令退出。
版權申明:歡迎轉載,但請注明出處
一些博文中有一些參考内容因時間久遠找不到來源了沒有注明,如果侵權請聯系我删除。