《5分鐘搞懂Python Venv,讓你的專案從此互不衝突 – 學習筆記》

Telegram share !

venv 是 Python 內建的虛擬環境模組,它是目前最受歡迎的 Python 虛擬環境管理工具之一。venv 可讓您輕鬆地建立和管理隔離的 Python 環境,這些隔離的環境,可以包含專案所需的特定套件和環境設定,而不會影響到系統的全域 Python 執行環境。

在本教學中,我們將向您展示如何使用 venv 建立虛擬環境,並在這個環境中安裝和管理 Python 套件。我們還將介紹如何導出和導入套件列表,以便輕鬆地在不同環境之間遷移專案。使用 venv,您可以快速建立和測試 Python 應用程式,而無需擔心套件衝突或版本不兼容的問題。

環境建立

安裝 Python

首先,請確保已經安裝了 Python。你可以從Python 官方網站下載並安裝最新版本的 Python。

創建venv虛擬執行環境

在你想要建立虛擬環境的目錄中,打開命令提示字元(CMD)或終端機(Terminal),然後輸入以下指令:

※Python 3.3 版本以後,venv 已經被包含在 Python 的標準庫中,所以不需要額外安裝。確保你的系統已經安裝了 Python 3.3 或更高版本。
※此處注意:官網範例為python -m venv [venv目錄名稱],但此處rdpapa建議用venv即可,這樣只要你在你自己的專案中,發現有venv目錄就可以知道這台有裝venv,如果隨便取會變得比較不好管理專案

範例專案:mytest

範例路徑:D:\my_python_proj\mytest

# Windows
D:\my_python_proj\mytest>  python -m venv venv

or 

#ubuntu
D:\my_python_proj\mytest>  python3 -m venv venv

指令執行完後,會在當前目錄下創建一個名為 venv 的虛擬環境資料夾,其中包含 Python 編譯器、標準庫和各種支持文件的副本。。

啟動venv虛擬環境

1.在Windows上:

D:\my_python_proj\mytest\>  venv\Scripts\activate

2.在macOS或Linux上:

/var/my_python_proj/mytest/>  source venv/bin/activate

Windows上啟動成功的畫面(此時已經進入venv的虛擬環境)

安裝套件

1.先查詢目前venv虛擬環境下有裝那些套件

一個新的venv環境套件一定是最少的

(venv) D:\my_python_proj\mytest>pip list
Package    Version
---------- -------
pip        22.3.1
setuptools 65.5.0
(venv) D:\my_python_proj\mytest>

2.安裝 Python 套件

在虛擬環境中,你可以使用 pip 來安裝 Python 套件。例如:

(venv) D:\my_python_proj\mytest> pip install requests
(venv) D:\my_python_proj\mytest> pip list
Package            Version
------------------ ---------
certifi            2024.8.30
charset-normalizer 3.3.2
idna               3.8
pip                22.3.1
requests           2.32.3
setuptools         65.5.0
urllib3            2.2.2

(venv) D:\my_python_proj\mytest>

離開venv虛擬環境

現在,我們可以建立一個 WordPress 容器。我們將使用以下命令建立一個名為 wordpress 的容器,並將其連結到 mysql 容器。我們還將將 WordPress 容器的 80 端口映射到主機的 8080 端口:

(venv) D:\my_python_proj\mytest> deactivate

D:\my_python_proj\mytest>

從ubuntu crontab排程中執行venv環境設定的程式

建立一個讓排程觸發的bash檔案,本範例我們叫run_script.sh(可以自行修改成你要的名稱crontab上可以對應就好)

新增Script.sh內容如下

#!/bin/bash
source venv/bin/activate
python3 main.py
deactivate

※注意:main.py為D:\my_python_proj\mytest>專案下的主要執行檔案喔!!!

編輯crontab的內容

#檢查網站服務是否中斷, 每十分鐘執行
*/10 * * * * cd /mnt/python/mytest/ && /bin/bash /mnt/python/mytest/run_script.sh >> /mnt/python/log/mytest_status.log 2>&1

如果你要驗證排程中是否有真的進入venv環境,可以在你的main.py加上以下語法把venv的pip list印出來驗證,可以暫時把主程式先mark起來,只執行print_pip_list()

import subprocess

def print_pip_list():
    result = subprocess.run(["pip", "list"], capture_output=True, text=True)
    print(result.stdout)



if __name__ == '__main__':
    print_pip_list()

成功畫面如下

root@ip-192-168-2-196:/mnt/python/mytest# ./run_script.sh 
Package            Version
------------------ ---------
certifi            2024.8.30
charset-normalizer 3.3.2
idna               3.8
pip                22.3.1
requests           2.32.3
setuptools         65.5.0
urllib3            2.2.2

通過掌握這些基本操作,你將能夠更有效地管理和運行 Python 專案,提升開發效率並減少潛在的相依性衝突。記住,良好的開發習慣始於環境管理,venv 是你邁向穩定且高效開發的重要一步。

結論

經過上述的練習,相信你將能夠更有效地管理和運行 Python 專案,既可提升多人在同台主機開發的效率,也能減少潛在的套件相依性衝突,如果您正在尋找一種快速、簡單的方法來建立與管理 Python套件庫,那麼 Venv 是一個不錯的選擇。