1.概述

在進行python項目開發時,不同項目可能需要依賴的python版本是不同的,有時電腦上需要安裝好幾個不同版本的python解釋器。而且在開發過程中,需要依賴一些第三方的包,不同項目依賴的第三方包及其版本也不相同,需要進行區分。

類似node.js使用npm可以全局安裝一些依賴包,也可以配合項目package.json為每個項目單獨安裝依賴,但是對於python來説,不僅僅依賴包可以分別安裝,不同項目甚至可以採用不同python解釋器,這個就是通過python的虛擬環境實現的。

環境,就是python解釋器 + 依賴包。python虛擬環境的作用就是實現環境的隔離,允許你在不同項目中使用不同的包版本和python版本,隔離項目依賴,避免了包衝突,確保項目的一致性和可移植性。

本文基於 windows + python 3.x 介紹默認的虛擬環境工具venv

2.全局環境和虛擬環境

2.1 全局環境

python安裝到本地後,打開安裝目錄後可見

Python全局環境和虛擬環境(venv)_虛擬環境

其中Lib,Scripts文件夾和python.exe自然形成一個全局環境

  • Lib/下是模塊和包,凡是第三方模塊和包統一都放在了\Lib\site-packages文件夾內,否則都是標準庫模塊和標準庫包。
  • Scripts/內是一些可執行的文件,例如pip.exe
  • python.exe 即python解釋器

設置環境變量後,隨便打開一個CMD,執行python,使用的是全局環境的python

Python全局環境和虛擬環境(venv)_python_02

2.2 虛擬環境

python3自帶了一個虛擬環境工具venv

在python環境變量設置好後,在asas空文件夾下打開CMD,執行python -m venv myenv命令,文件夾內會生成一個myenv文件夾,我們就創建好了一個叫myenv的虛擬環境,在這個asas文件夾下的項目代碼可以都依賴這個虛擬環境,所以虛擬環境也是以當前安裝的python全局環境為模板復刻而來的

和全局環境一樣,虛擬環境也會存在Lib,Scripts文件夾,不同的是,虛擬環境的Lib文件夾下只有site-packages一個文件夾,用於保存項目自身的第三方依賴,也可以理解為虛擬環境下Lib文件夾內只保存該項目本身需要的第三方的依賴。

Python全局環境和虛擬環境(venv)_依賴包_03

全局環境的python.exe在虛擬環境下則跑到Scripts文件夾裏面去了。

Python全局環境和虛擬環境(venv)_python_04

虛擬環境,實際上就是全局環境的一部分文件複製一份分配給了不同的項目而已。

CMD切換到myenv\Scripts目錄下,執行activate.bat,會出現一個(myenv) 開頭的終端,此時進入的就是該項目的虛擬環境,使用的是虛擬環境的python

Python全局環境和虛擬環境(venv)_虛擬環境_05

執行activate.bat,就是在激活虛擬環境,虛擬環境需要激活才能生效,直接CD到asas文件夾下執行python命令,使用的還是全局環境。

可以用不同的python版本創建不同虛擬環境的項目,就實現了每個項目依賴不同python版本,相互隔離運行

3.不同環境的包依賴規則

  1. 全局環境和虛擬環境可以各自安裝第三方依賴包,全局環境項目依賴的第三方包引用自全局環境\Lib\site-packages,虛擬環境項目依賴的第三方包引用自項目自身虛擬環境\Lib\site-packages
  2. python使用pip管理第三方依賴,全局環境執行pip install時,安裝在全局環境\Lib\site-packages內,虛擬環境執行pip install時,安裝在虛擬環境\Lib\site-packages內
  3. 虛擬環境項目在依賴標準庫模塊和標準庫包時,直接從全局環境\Lib調取,需要第三方依賴包時,只能從自己虛擬環境的\Lib\site-packages內調取,不能調取全局環境\Lib\site-packages中的第三方包
  4. 不同虛擬環境的項目之間,不能引用對方虛擬環境\Lib\site-packages下的第三方依賴包
  5. 全局環境項目也不能調取某個項目虛擬環境\Lib\site-packages下的第三方依賴包

4.在IDE中使用全局環境和虛擬環境

以最好用的Python IDE:PyCharm為例

新建項目時,默認會選中創建虛擬環境下的解釋器

Python全局環境和虛擬環境(venv)_虛擬環境_06

虛擬環境下,IDE會自動創建虛擬環境:.venv,終端打開時IDE也會自動為我們切換到虛擬環境的命令行下,安裝的包也自動保存到項目虛擬環境下

Python全局環境和虛擬環境(venv)_依賴包_07

如只用全局環境,則選擇已有的自定義環境,並保證python是安裝時的安裝目錄中的解釋器即可

Python全局環境和虛擬環境(venv)_依賴包_08