虛擬環境
簡介
虛擬環境(Virtual Environment)
在 Python 中,虛擬環境
是一個獨立的資料夾,並且裡面裝好了特定版本的 Python,以及一系列相關的套件
。
- 優點:
- 你的專案會擁有一個專屬的獨立 Python 環境。
- 不需要 root 權限,就可以安裝新套件。
- 方便控管不同版本的套件,不用擔心升級套件會影響到其他專案。
- 如果需要多人協作或在不同機器上跑同一個專案時,使用虛擬環境也可以確保環境一致性。
- 注意:
- 假如 Project / Application B 需要某個 package 升級到 version=3.0,也不會影響到 Project / Application A 的環境。
- 當你不需要虛擬環境時,直接刪除 虛擬環境的資料夾 即可。
為何需要虛擬環境?
- 情境:一台電腦需要使用
相同套件但不同版本
的時候- Project / Application A 需要 package C(version=1.0)
- Project / Application B 需要 package C(version=2.0)
- 安裝 package C 在同一台電腦上,則不管安裝 1.0 或是 2.0 都會衝突,以致於其中一個 Project / Application 無法使用。
- 解決方案
- 針對每個 Project / Application,各別創建『 虛擬環境(完全獨立且隔離的運行環境) 』來使用,避免干擾到同一系統上運行的其他 Project / Application。
- 意即
- Project / Application A 創建一個虛擬環境來安裝 package C(version=1.0)
- Project / Application B 創建一個虛擬環境來安裝 package C(version=2.0)
- 意即
- 針對每個 Project / Application,各別創建『 虛擬環境(完全獨立且隔離的運行環境) 』來使用,避免干擾到同一系統上運行的其他 Project / Application。
pip 套件管理工具
從 Python 3.4 開始,它被預設包含在 Python 二進制安裝程式中。
- 在安裝套件之前,請先確認是否已安裝
套件管理工具(Package Manager)
,如:pip。- Windows 環境下安裝 pip
- MacOS 一般都內建 Python,並包含 pip 套件管理工具,故不需額外安裝。
- 套件管理工具(Package Manager)
- 如 pip、npm、yarn、apt-get 等,用來讓你更加『 方便 』安裝、刪除、升級原有系統或開發語言 所缺少的第三方工具。
- PyPI(Python 官方第三方軟體倉儲, The Python Package Index)
- 如果用生活的例子來比喻,就像 Android 手機,有 google play 可以安裝軟體。Iphone 有 app store 來安裝軟體。在這之中 PyPI 就像是 google play 或是 app store。
- 在我們使用 pip 安裝套件的時候,下指令
pip install 套件名稱
預設就是從 PyPI 下載套件。
用於建置虛擬環境的 Python 套件
💡 venv 套件:
用來建立與管理虛擬環境的套件。venv 通常會安裝你能夠取得的最新版本的 Python。
不需要安裝。
💡 virtualenv 套件:
用來建立與管理虛擬環境的套件。venv 通常會安裝你能夠取得的最新版本的 Python。
需要安裝:pip install virtualenv
。
建置步驟
Step 1: 建立專案資料夾
$ mkdir 自訂資料夾名稱
$ cd 自訂資料夾名稱
Step 2: 在專案資料夾內,建立 python3 虛擬環境
💡 注意!
虛擬環境建立後,千萬不要對虛擬環境目錄進行任何更名/搬動/複製 (任何影響到虛擬環境的絕對路徑的活動都不行)。搬動它,會使你的虛擬環境錯亂;
複製它,複製出來的虛擬環境還是和原來的相關, 而不是獨立的一份。這是因為目前 venv 在產生 activate.bat(批次檔 = Batch) 時,是將虛擬環境的路徑直接寫死在檔案裡。
註:
Windows 批次檔 (batch):
是一種用來當成手稿語言運作程式的檔案。它本身是文字文件,`其中包含了一系列讓具備命令列介面的直譯器讀取並執行的指令`,副檔名為 bat。
簡單來說就是一個 `操控 windows 的程式`。
建立 python3 虛擬環境,兩種方式:
方式一:使用
venv
套件#MacOS $ python3 -m venv 自訂虛擬環境名稱 #Windows $ python -m venv 自訂虛擬環境名稱
方式二:使用
virtualenv
套件#MacOS $ pip3 install virtualenv $ virtualenv 自訂虛擬環境名稱 #Windows $ pip install virtualenv $ virtualenv 自訂虛擬環境名稱
安裝不同 Python 版本的虛擬環境
$ where python3.11 /usr/local/bin/python3.11 $ virtualenv 自訂虛擬環境名稱 -p "python 資料夾路徑" $ virtualenv MyVenv -p "/usr/local/bin/python3.11"
預期的目錄架構
~/Downloads » tree project_demo -L 2 project_demo └── MyVenv ├── bin ├── include ├── lib └── pyvenv.cfg
Step 3: 啟動虛擬環境
#MacOS
$ source 自訂虛擬環境名稱/bin/activate
#Windows
$ 自訂虛擬環境名稱\Scripts\activate.bat
- 啟動虛擬環境,長怎樣呢?
- 出現
(自訂虛擬環境名稱)
→ 啟動虛擬環境 成功 - Linux / MacOS
(自訂虛擬環境名稱) $
- Windows
(自訂虛擬環境名稱) C:\>
- 出現
Step 4: 在虛擬環境內,安裝任何需要的套件
$ pip install 套件名稱
Step 5: 關閉虛擬環境
- Linux / MacOS
$ deactivate
- Windows
$ 自訂虛擬環境名稱\Scripts\deactivate $ deactivate
- 關閉虛擬環境,長怎樣呢?
(自訂虛擬環境名稱)
消失了~ → 關閉虛擬環境 成功- Linux / MacOS
$
- Windows
C:\>
pip 套件管理工具 的常用指令
- 若為 Linux / MacOS 且 不在虛擬環境內 安裝套件,則 pip 安裝指令應改為
pip3 install 套件名稱
;反之,若為 Linux / MacOS 且 在虛擬環境內 安裝套件,則 pip 安裝指令為pip install 套件名稱
。 - 若為 Windows,在安裝套件時 不論是否在虛擬環境內,pip 安裝指令為
pip install 套件名稱
。
查詢 pip 版本
$ pip -V
安裝套件
$ pip install 套件名稱
$ pip install 套件名稱==某個特定版本
e.g. `pip install Django==1.9.10`
升級套件
$ pip install 套件名稱 --upgrade
解除安裝 / 刪除 套件
$ pip uninstall 套件名稱
顯示虛擬環境中所有已經安裝的套件(shows ALL installed packages.)
$ pip list
顯示一個特定套件的資訊
$ pip show 套件名稱
匯出已安裝的套件
$ pip freeze > requirements.txt
讀取 requirements.txt 還原虛擬環境
$ rm -r MyVenv
$ python3 -m venv NewVenv
$ source NewVenv/bin/activate
$ pip install -r requirements.txt