爲何你的python版本一團糟?由於少了這個操做!

坑人的版本html

python 的版本問題一直是個廣被吐槽的黑點。以致於有人調侃說:python

python 是世界上最好的兩種語言!

 

在這裏我要說明下,對於初學者來講,版本間的語法差別其實並不大。如今剛開始學 python 的人,放心大膽地用最新版本便可。業內所詬病的,主要是針對代碼上的不兼容。linux

但平心而論,版本間的兼容問題並非 python 所獨有。且就算 python 只有一個版本,第三方庫的版本同樣會讓人抓狂。git

好比說,你以前在電腦上用 python 寫了一個網站,使用了 django 框架,版本是 1.11。過了一年,你要開發一個新網站,這時候 django 已經發展到了 2.0 版本,你是用仍是不用?更新了版本,電腦上的老網站代碼就沒法執行了。django

或者,你安裝並使用了某個模塊 a 的最新版本。而後另外一個項目用到的模塊 b,b 的代碼卻依賴於模塊 a 較早的版本。這種狀況下,你甚至可能都沒法成功安裝模塊 b。windows

這些版本的衝突在開發中十分常見,而 python 2 和 3 的版本差別又加重了這一問題。app

對此,早已有了成熟的解決方案:框架

虛擬環境ide

python 開發中所謂的虛擬環境,就是爲 python 版本及第三方庫建立獨立的開發環境,使不一樣項目之間互不干擾。藉助於虛擬環境,咱們能夠在同一臺電腦上構建出項目 a 在基於 python 2 的環境中運行,而項目 b 能夠在基於 python 3 的環境中運行。工具

爲何你的python版本一團糟?由於少了這個操做!

 

 

虛擬環境須要經過一些工具建立,常見的幾種:

1, virtualenv。這是 python 最爲經常使用的虛擬環境工具,簡單有效,我本身就用它。本文稍後部分會介紹下基本的安裝和使用。網上也有至關多的使用教程。

virtualenv 的一個侷限是沒法統一管理你電腦上的全部虛擬環境,所以環境多了以後,可能會遺漏,或形成冗餘。對此,有一個擴展工具virtualenvwrapper,能幫你統一管理各個環境。

2, venv。它的實現很大程度基於 virtualenv,使用方法也很相似。而 python 現已內置了 venv。

3, conda。這個工具至關於 pip + virtualenv + virtualenvwrapper,它不只能建立和管理虛擬環境,自己仍是一個包管理器,能夠下載安裝第三方庫。功能完善,使用也不復雜。著名的數據分析開發包 anaconda 裏就默認使用 conda 做爲環境和模塊管理工具。

接下來咱們簡要介紹下:

virtualenv 的使用

安裝

python很容易學!小編有弄一個交流,互問互答,資源共享的交流學習基地,若是你也是python的學習者或者大牛都歡迎你來!qun:227+435!一塊兒 學習共同進步!

在系統命令行經過 pip 或者 easy_install 安裝便可:

?

1

pip install virtualenv

若是你的命令行沒法執行 python、pip 及後續的 virtualenv 命令,請檢查你環境變量裏的path 路徑。(還不熟悉的請在公衆號回覆關鍵字 安裝)

建立

進入到合適的目錄下(通常是項目根目錄,但不建議加入 git 倉庫裏提交),經過 virtualenv 命令建立一個名爲 my_env 的環境(這個名字可自定義):

?

1

virtualenv my_env

沒有報錯的話,會成功建立目錄 my_env,其中有一些目錄和文件,這就是咱們的虛擬環境所在了。

爲何你的python版本一團糟?由於少了這個操做!

 

 

激活

使用虛擬環境前,須要「激活」環境:

windows

?

1

my_envscriptsactivate

linux

?

1

source my_env/bin/activate

路徑根據你所在位置會有所不一樣,也可使用完整路徑。

激活環境以後,命令行前面會用括號標識出你所在的環境。這時候再經過 pip 安裝第三方模塊,就不會影響到系統自己的 python 環境。

爲何你的python版本一團糟?由於少了這個操做!

 

 

關閉

當不須要環境時,能夠經過 deactivate 命令關閉。固然,直接關掉命令行窗口也沒毛病。

指定 python

虛擬環境的建立,默認是使用 virtualenv 所在的那個 python 版本。若是你電腦上有多個 python,則能夠指定環境的 python 版本,例如:

?

1

virtualenv -p c:python27python.exe env27

虛擬環境的本質

爲何簡單幾行命令,就能夠實現 python 環境的分離?本質上靠的仍是環境變量裏的 path 路徑。

path 的做用,就是當你執行一個命令時,系統要知道去哪裏找這個命令。path 裏有多個路徑,就按順序從前到後依次查找。執行 python、pip 等命令時,都是按照這個方式進行。

經過 echo 命令能夠查看路徑:

windows

爲何你的python版本一團糟?由於少了這個操做!

 

 

linux

爲何你的python版本一團糟?由於少了這個操做!

 

 

當版本出現混亂時,每每就是 path 中有多個路徑,不一樣路徑中有含有相同的命令,以致於執行了並不是你預期的那個版本中的命令。好比你的 python 命令是在 python27 目錄下,而 pip 執行的倒是 python36/scripts 裏的,而後就發生了「明明安裝成功了,程序裏卻找不到」的狀況。

而當激活一個虛擬環境時,就至關於在 path 的開頭增長了咱們建立的目錄,使用這個目錄裏的 python 及相關庫。安裝新的庫也是裝在新建的這個目錄之下。從而避免與其餘版本發生干擾。

爲何你的python版本一團糟?由於少了這個操做!

 

 

若是你不清楚你所用的命令到底是哪裏的,能夠在命令行中使用 where/which 命令查看:

爲何你的python版本一團糟?由於少了這個操做!

 

 

pycharm 裏的虛擬環境

可能不少同窗還不習慣用命令行,而是徹底使用 ide 來進行配置。那麼最後我特別提一下 pycharm 的狀況。

新版本的 pycharm 默認會在建立項目時新建一個虛擬環境,所以不瞭解這個操做的同窗會疑惑,命令行裏用 pip 裝好的模塊爲何到 pycharm 裏就用不了了。簡單的解決方法,就是從 pycharm 的設置面板裏安裝庫。

其餘的可選方案:

  1. 建項目時不要選新建虛擬環境
  2. 建項目時選虛擬環境繼承已有的庫
  3. 建項目時選用命令行建立好的虛擬環境
  4. 建好項目後,在命令行激活對應虛擬環境後再安裝庫
相關文章
相關標籤/搜索