為什麼你的python版本一團糟?因為少了這個操作
坑人的版本
Python 的版本問題一直是個廣被吐槽的黑點。以至於有人調侃說:
Python 是世界上最好的兩種語言!
在這裡我要說明下,對於初學者來說,版本間的語法差異其實並不大。現在剛開始學 Python 的人,放心大膽地 用最新版本 即可。業內所詬病的,主要是針對程式碼上的不相容。
但平心而論,版本間的相容問題並不是 Python 所獨有。且就算 Python 只有一個版本,第三方庫的版本一樣會讓人抓狂。
比如說,你之前在電腦上用 Python 寫了一個網站,使用了 django 框架,版本是 1.11。過了一年,你要開發一個新網站,這時候 django 已經發展到了 2.0 版本,你是用還是不用?更新了版本,電腦上的老網站程式碼就無法執行了。
或者,你安裝並使用了某個模組 A 的最新版本。然後另一個專案用到的模組 B,B 的程式碼卻依賴於模組 A 較早的版本。這種情況下,你甚至可能都無法成功安裝模組 B。
這些版本的衝突在開發中十分常見,而 Python 2 和 3 的版本差異又加劇了這一問題。
對此,早已有了成熟的解決方案:
虛擬環境
Python 開發中所謂的 虛擬環境 ,就是為 Python 版本及第三方庫建立獨立的開發環境,使不同專案之間互不干擾。藉助於虛擬環境,我們可以在同一臺電腦上構建出專案 A 在基於 Python 2 的環境中執行,而專案 B 可以在基於 Python 3 的環境中執行。

虛擬環境需要通過一些工具建立,常見的幾種:
1, virtualenv 。這是 Python 最為常用的虛擬環境工具,簡單有效,我自己就用它。本文稍後部分會介紹下基本的安裝和使用。網上也有相當多的使用教程。
virtualenv 的一個侷限是無法統一管理你電腦上的所有虛擬環境,因此環境多了之後,可能會遺漏,或造成冗餘。對此,有一個擴充套件工具 virtualenvwrapper ,能幫你統一管理各個環境。
2, venv 。它的實現很大程度基於 virtualenv,使用方法也很類似。而 Python 現已內建了 venv。
3, conda 。這個工具相當於 pip + virtualenv + virtualenvwrapper ,它不僅能建立和管理虛擬環境,本身還是一個包管理器,可以下載安裝第三方庫。功能完善,使用也不復雜。著名的資料分析開發包 anaconda 裡就預設使用 conda 作為環境和模組管理工具。
接下來我們簡要介紹下:
virtualenv 的使用
安裝
在系統命令列通過 pip 或者 easy_install 安裝即可:
pip install virtualenv
如果你的命令列無法執行 python、pip 及後續的 virtualenv 命令,請檢查你環境變數裡的 PATH 路徑。(還不熟悉的請在公眾號回覆關鍵字 安裝 )
建立
進入到合適的目錄下(一般是專案根目錄,但不建議加入 git 倉庫裡提交),通過 virtualenv
命令建立一個名為 MY_ENV
的環境(這個名字可自定義):
virtualenv MY_ENV
沒有報錯的話,會成功建立目錄 MY_ENV,其中有一些目錄和檔案,這就是我們的虛擬環境所在了。

啟用
使用虛擬環境前,需要“啟用”環境:
windows
MY_ENV\Scripts\activate
linux
source MY_ENV/bin/activate
路徑根據你所在位置會有所不同,也可以使用完整路徑。
啟用環境之後,命令列前面會用括號標識出你所在的環境。這時候再通過 pip 安裝第三方模組,就不會影響到系統本身的 Python 環境。

關閉
當不需要環境時,可以通過 deactivate
命令關閉。當然,直接關掉命令列視窗也沒毛病。
指定 Python
虛擬環境的建立,預設是使用 virtualenv 所在的那個 Python 版本。如果你電腦上有多個 Python,則可以指定環境的 Python 版本,例如:
virtualenv -p C:\python27\python.exe ENV27
虛擬環境的本質
為什麼簡單幾行命令,就可以實現 Python 環境的分離?本質上靠的還是環境變數裡的 PATH 路徑。
PATH 的作用,就是當你執行一個命令時,系統要知道去哪裡找這個命令。PATH 裡有多個路徑,就按順序從前到後依次查詢。執行 python、pip 等命令時,都是按照這個方式進行。
通過 echo
命令可以檢視路徑:
windows

linux

當版本出現混亂時,往往就是 PATH 中有多個路徑,不同路徑中有含有相同的命令,以至於執行了並非你預期的那個版本中的命令。比如你的 python 命令是在 python27 目錄下,而 pip 執行的卻是 python36/Scripts 裡的,然後就發生了“明明安裝成功了,程式裡卻找不到”的情況。
而當啟用一個虛擬環境時,就相當於在 PATH 的開頭增加了我們建立的目錄,使用這個目錄裡的 Python 及相關庫。安裝新的庫也是裝在新建的這個目錄之下。從而避免與其他版本發生干擾。

如果你不清楚你所用的命令究竟是哪裡的,可以在命令列中使用 where/which
命令檢視:

PyCharm 裡的虛擬環境
可能很多同學還不習慣用命令列,而是完全使用 IDE 來進行配置。那麼最後我特別提一下 PyCharm 的情況。
新版本的 PyCharm 預設會 在建立專案時新建一個虛擬環境 ,因此不瞭解這個操作的同學會疑惑,命令列裡用 pip 裝好的模組為什麼到 PyCharm 裡就用不了了。簡單的解決方法,就是從 PyCharm 的設定面板裡安裝庫。
其他的可選方案:
- 建專案時不要選新建虛擬環境
- 建專案時選虛擬環境繼承已有的庫
- 建專案時選用命令列建立好的虛擬環境
- 建好專案後,在命令列啟用對應虛擬環境後再安裝庫
這些我在之前的文章 ofollow,noindex" target="_blank">[新手向視訊]新版PyCharm建立專案為什麼會有問題 裡也提過, 檢視 PyCharm 的上手教程,可在公眾號( Crossin的程式設計教室 )回覆關鍵字 pycharm
以上就是關於虛擬環境的一些介紹,留個小作業: 親自動手建立一個虛擬環境,並在其中安裝一個第三方庫。
過程中有任何疑問,或想了解更多關於虛擬環境的配置,可以上我們的論壇 http:// bbs.crossincode.com 進行討論。
下課!
════
其他文章及回答:
如何自學Python |新手引導 |精選Python 問答 |Python單詞表 |知乎下載器 |人工智慧 |嘻哈 |爬蟲 |我用Python |高考 |requests |AI平臺
歡迎搜尋及關注: Crossin的程式設計教室