Posted on

YOLOv8使用範例

建模的範例

先用下面指令安裝好所需的套件

pip install ultralytics

然後在Roloflow下載要訓練的素材集,選擇YOLOv8

把裡面的資料(含data.yaml)解壓縮在同層資料夾下,如圖

接著直接執行下面的程式,yolov8會自動下載所需要的yolov8.yamlyolov8n.pt

import multiprocessing
import os
from ultralytics import YOLO
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'

def my_function():
    model = YOLO('yolov8.yaml').load("yolov8n.pt")
    # Train the model
    model.train(data='./data.yaml', epochs=300, imgsz=640)
    model.val(data="./data.yaml")

if __name__ == '__main__':
    multiprocessing.freeze_support()  # Optional, if you're freezing the script
    my_function()

這時候會出現錯誤如下,因為資料集放在哪邊也是剛剛才自動下載的,所以我們要打開一下這個設定檔案,設定一下我們的資料集的正確位置(datasets_dir)

看到這些訊息就代表成功的開始建模型囉!

模型使用範例

重點是在這行

model = YOLO('best.pt')

這行在載入我們建好的模型

results = model(image, show=False, verbose=False)

model這個預測方法有很多可控制的參數,例如要不要直接秀出圖片、要不要存圖片等等

YOLOv8非常貼心的是在於說,其吐出的物件如result,只要print這個物件,就會有非常詳細的結構和屬性意義教學,在開發上非常的方便

import VideoStream
import cv2
import numpy as np
from ultralytics import YOLO


videostream = VideoStream.VideoStream((1280, 720), 30, 0).start()
cam_quit = 0
model = YOLO('best.pt')
# 繪製邊框和標籤
def detect(image):
    results = model(image, show=False, verbose=False)
    # Show the results
    result = list(results)[0]
    for i in range(len(result.boxes)):
        r = result[i].boxes
        cls = int(r.cls[0].item())
        xywh = r.xywh[0].tolist()
        x_center, y_center, width, height = [int(x) for x in xywh[:4]]
        if width < 100 and height < 100:
            x1 = int(x_center - (width / 2))
            y1 = int(y_center - (height / 2))
            x2 = x1 + width
            y2 = y1 + height
            cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 3)
            cv2.putText(image, result.names[cls], (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 1, cv2.LINE_AA) 

while cam_quit == 0:
    imageSource = videostream.read()
    imageSource = cv2.resize(imageSource, (960, 540))
    detect(imageSource)
    cv2.imshow("image", imageSource)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        cam_quit = 1

videostream.stop()
cv2.destroyAllWindows()

Posted on

pyav介紹

甚麼是pyav

PyAV是FFmpeg的Python封裝,旨在提供底層庫的全部功能和控制,同時盡可能管理繁瑣的細節。PyAV用於直接和精確地訪問媒體,包括容器、流、封包、編解碼器和幀。它還提供了一些數據轉換功能,並幫助您在其他程序之間傳送數據(例如Numpy和Pillow)。

然而,由於媒體處理非常複雜,PyAV無法完全抽像或為您做出所有最佳決策。 如果FFmpeg命令可以滿足您的需求,那麼PyAV可能會成為阻礙。 但在必要時,PyAV是一項關鍵工具。安裝PyAV可能有一些複雜的依賴關係,但現在可以在PyPI上找到針對Linux、Mac和Windows的二進位安裝套件。

官方網站: https://pyav.org/docs/stable/

GitHub位置: https://github.com/PyAV-Org/PyAV

建議使用場景

pyAVffmpeg 都是用來處理影音的工具,但它們的使用場景和方法有所不同。以下是對兩者的比較,以及根據不同情境的建議:

  1. 使用介面
    • pyAV:是一個 Python 函式庫,允許開發者使用 Python 語言來操作影音資料。
    • ffmpeg:是一個命令行工具,通常被用於進行批量處理或在沒有 Python 環境的系統上執行。
  2. 易用性和彈性
    • pyAV:由於是 Python 函式庫,使用者可以利用 Python 語言的所有特性來進行更複雜的操作,比如條件式處理、迴圈等。這使得對於需要更細緻操作的場景,例如資料分析、特定範圍的編輯等,pyAV 更有優勢。
    • ffmpeg:對於直接和簡單的影音轉換、剪裁、合併等操作,ffmpeg 的命令行界面非常適用。它能夠快速完成大部分的基本任務。
  3. 整合和擴展性
    • 如果你正在開發一個 Python 應用程序,並且希望直接在程式中處理影音,那麼 pyAV 可能是更好的選擇。
    • 如果只是簡單的一次性任務,或者需要在不同的平台或系統上腳本化影音處理,那麼 ffmpeg 可能更為適合。

結論

  • 如果你是 Python 開發者,且希望在程式中進行複雜的影音操作,那麼 pyAV 是個不錯的選擇。
  • 如果你只需要執行基本的影音轉換、剪裁或合併等操作,且希望能在多種平台上快速執行,那麼直接使用 ffmpeg 命令行工具可能更加適合。

安裝方法

使用以下方式安裝(如果下面的指令失敗的話,請參考此頁面安裝: https://pyav.org/docs/stable/overview/installation.html)

pip install av

後來我是使用下面這方法安裝成功的(windows)

pip install av --no-binary av
git clone https://github.com/PyAV-Org/PyAV.git
cd PyAV-main
python setup.py build --ffmpeg-dir=C:\ffmpeg

簡單的拉取RTMP源流的範例

以下的範例會拉取rtmp://127.0.0.1/live/testStream並使用OpenCV的函數顯示影像在視窗裡

import av
import cv2
import numpy as np
import os
import signal

def exit(*args,**kwargs):
    os.kill( os.getpid(), 9 )
signal.signal(signal.SIGINT,exit)

print('opening video...')
video = av.open('rtmp://127.0.0.1/live/testStream', 'r')

print('start streaming')
try:
    for packet in video.demux():
        for frame in packet.decode():
            if packet.stream.type == 'video':
                img = frame.to_ndarray(format='bgr24')
                cv2.imshow("Test", img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
except KeyboardInterrupt:
    print(KeyboardInterrupt)
    pass
cv2.destroyAllWindows()
Posted on

conda無法安裝套件,缺少OpenSSL解決方案

錯誤訊息

Collecting package metadata (current_repodata.json): failed CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is required to download and install packages. Exception: HTTPSConnectionPool(host=’conda.anaconda.org’, port=443): Max retries exceeded with url: /conda-forge/win-64/current_repodata.json (Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available.”))

使用pip install/conda install跳出的錯誤

解決方法

在anaconda3>Library>bin尋找這兩個檔案

  • libcrypto-1_1-x64.dll
  • libssl-1_1-x64.dll

然後複製到anaconda3>DLLs.

相關討論串

https://github.com/conda/conda/issues/11982

Posted on

PyCharm – 好用的python開發環境

官方網站

https://www.jetbrains.com/pycharm/

為什麼選擇PYCHARM

  • 所有 PYTHON 工具集中在一處
  • 提高生產力: 在 PyCharm 處理例程時節省時間。專注於更大的事情並採用以鍵盤為中心的方法來充分利用 PyCharm 的許多生產力功能。
  • 獲得智能幫助: PyCharm 了解您的代碼的一切。依靠它實現智能代碼完成、實時錯誤檢查和快速修復、輕鬆的項目導航等等。
  • 提升代碼質量: 編寫整潔且可維護的代碼,同時 IDE 通過 PEP8 檢查、測試協助、智能重構和大量檢查幫助您控制質量。
  • 只需您所需要的: PyCharm 由程序員設計,為程序員而設計,旨在提供高效 Python 開發所需的所有工具。

免費的社區版本和付費的專業版本

功能比較圖

專業版的優惠方案

若為在學學生,可以獲得免費帳號
https://www.jetbrains.com/community/education/#students
若以畢業,但是電子信箱仍然可以用,則也可以用學校的信箱申請學生版本使用。

另外,對於一些電腦學院或者是初期創業者也都有提供優惠,個人使用者也有優惠(更多資訊: https://www.jetbrains.com/pycharm/buy/#discounts)

下載連結

請點此下載: https://www.jetbrains.com/pycharm/download/#section=windows

點進去右邊為免費版本,左邊為付費版本,但是可以免費使用30天

Posted on 1 Comment

在python裡面使用GPU 3 – 開發GPU程式

GPU運算與CPU運算的不同

下面是GPU 和CPU 之間的一些主要區別:

  • 運算單元:GPU 通常具有數百甚至數千個運算單元,而CPU 通常只有幾十個運算單元。
  • 並行運算能力:由於GPU 具有更多的運算單元,它能夠同時處理更多的數據,因此在並行運算方面具有優勢。
  • 計算能力:在單位時間內,GPU 的計算能力通常要高於CPU。
  • 功耗:由於GPU 具有更多的運算單元,它的功耗通常比CPU 高。
  • 用途:GPU 專門用於圖形處理,通常用於遊戲、視頻播放和圖形設計等任務。而CPU 則是計算機的中央處理器,負責處理各種計算任務。

指定使用的GPU

在程式中使用 GPU 時,需要在執行模型訓練或推理時將運算放在 GPU 上。您可以使用 TensorFlow 的 tf.device 函數指定運算的裝置。例如,您可以將運算放在第一個可用的 GPU 上:

with tf.device('/gpu:0'):
  # 在這裡放置您的運算
  pass

此外,可能需要注意 GPU 記憶體使用量。當您的模型變得越大,可能需要更多的 GPU 記憶體。可以使用 TensorFlow 的 tf.config.experimental.set_virtual_device_configuration 函數設定虛擬裝置配置以指定可用 GPU 的記憶體數量。

開發GPU程式

對開發人員而言,最大的不同就是,GPU運算會需要將資料在入GPU裡面,而當資料在GPU裡面時,我們並沒有辦法直接像當資料在CPU裡面時一樣,可以很方便的使用print來查看裡面的內容。
也因此,針對支援GPU的陣列運算庫,我們可以發現,通常在做陣列運算時,會呼叫相關的方法去做運算,如:

另外在載入資料時,也要注意使用既有可使用GPU載入資料的函數載入資料至正確的GPU上面(例如 tf.data),避免資料頻繁地在GPU和CPU之內轉換

避免資料頻繁地在GPU和CPU之內轉換

要避免資料頻繁地在 GPU 和 CPU 之間轉換,可以考慮以下幾點:

  • 將資料放在 GPU 上:使用 tf.device 函數指定資料所在的裝置。
  • 將運算和資料放在同一個 GPU 上:這樣可以避免資料在 GPU 和 CPU 之間頻繁轉換。
  • 使用高效的數據讀取方式:使用 TensorFlow 的數據讀取功能(例如 tf.data)可以更有效地讀取和轉換數據,並減少磁盤 I/O 的負擔。

更高效的使用GPU

  • 將運算放在 GPU 上:使用 tf.device 函數指定運算的裝置。
  • 設定虛擬裝置配置:使用 tf.config.experimental.set_virtual_device_configuration 函數指定可用 GPU 的記憶體數量。
  • 使用數據平行:將模型的數據分成多個 batch 並同時在多個 GPU 上訓練,可以提升訓練速度。您可以使用 TensorFlow 的 tf.distribute.Strategy API 來實現數據平行。
  • 調整 batch size:適當調整 batch size 可以平衡訓練速度和 GPU 記憶體使用量。

在tensorflow裡面自動最佳化使用GPU

TensorFlow 可以自動偵測可用的 GPU,並將運算自動分配到 GPU 上。要讓 TensorFlow 自動最佳化使用 GPU,您需要:

安裝 NVIDIA 驅動程式和 CUDA Toolkit。
安裝 GPU 版本的 TensorFlow。
在安裝 NVIDIA 驅動程式和 CUDA Toolkit 時,請確保安裝適用於您的 GPU 的版本。您可以在 NVIDIA 網站上查看可用驅動程式的列表。

安裝 GPU 版本的 TensorFlow 時,您需要使用 tensorflow-gpu 套件。您可以使用 pip 安裝:

pip install tensorflow-gpu

安裝完成後,TensorFlow 就會自動偵測可用的 GPU,並將運算自動分配到 GPU 上。您不需要在程式中手動指定運算的裝置。

注意:如果您的系統中沒有可用的 GPU,TensorFlow 會使用 CPU。

Posted on 1 Comment

在python裡面使用GPU 2 – 安裝正確的套件

前置作業

使用 GPU 來加速 Python 程式的運算需要:

  • 電腦必須要有適合的 GPU 及相關驅動程式。
  • 必須安裝支援 GPU 的 Python 程式庫,例如 TensorFlow、PyTorch 或 CuPy。
  • 在使用這些程式庫時將運算指定給 GPU 執行

安裝Tensorflow GPU版本的函式庫

在上面幾步驟都安裝好之後,要確認自己所使用的函式庫是支援GPU的,一般來說,所有的函式庫都會分為【支持GPU版本】或者【針對CPU版本】。
所以要先確定自己所下載的函式庫是支持GPU的。如果你的環境之前已經安裝過CPU版本的該函式庫,建議新增另一個虛擬環境,讓新專案的函式庫能夠完全與CPU版本的程式分開
這邊是使用pip安裝tensorflow套件的流程:https://www.tensorflow.org/install/pip?hl=zh-tw
在最下方有一個列表https://www.tensorflow.org/install/pip?hl=zh-tw#package-location

若是想要直接確定要下載的版本,可從上面的列表下載.whl檔案,然後用以下指令套用

pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl

檢查有沒有Tensorflow 可用的GPU

可使用下面的程式來檢查

import tensorflow as tf
print("TensorFlow version:", tf.__version__)

print("Is there a GPU available: "),
print(tf.config.list_physical_devices("GPU"))

print("Is the Tensor on GPU #0:  "),
print(x.device.endswith('GPU:0'))

要注意的是,即使你的GPU和驅動程式都正確,但若是安裝到錯誤的函式庫版本(如CPU版本的tensorflow)
這邊仍然會顯示沒有可以使用的GPU

因此,要確認所安裝的函式庫版本是否正確

檢查並設定使用GPU

要在 TensorFlow 中使用 GPU,你需要先檢查有沒有可用的 GPU,並設定 TensorFlow 使用 GPU:

import tensorflow as tf

# 檢查有沒有可用的 GPU
print(tf.config.list_physical_devices('GPU'))

# 設定 TensorFlow 使用 GPU
tf.config.set_visible_devices(tf.config.list_physical_devices('GPU')[0], 'GPU')

要在 PyTorch 中使用 GPU,你可以使用 torch.cuda.is_available() 來檢查有沒有可用的 GPU,並使用 .to(‘cuda’) 將張量放到 GPU 上運算:

import torch

# 檢查有沒有可用的 GPU
print(torch.cuda.is_available())

# 將張量放到 GPU 上運算
x = torch.ones((2, 2), device='cuda')
print(x)

在 CuPy 中使用 GPU 也類似,你可以使用 cp.cuda.Device().id 來檢查有沒有可用的 GPU,並使用 .to_gpu() 將陣列放到 GPU 上運算:

import cupy as cp

# 檢查有沒有可用的 GPU
print(cp.cuda.Device().id)

# 將陣列放到 GPU 上運算
x = cp.ones((2, 2))
x = x.to_gpu()
print(x)
Posted on 1 Comment

在python裡面使用GPU 1 – 選擇適合的GPU

選擇適用的GPU

在python裡面要使用GPU做運算,需要去呼叫GPU操作的方法來操作目標對象。

所以,能不能支持GPU運算,和套件本身有沒有開發針對該GPU操作的模組版本,是最為相關的。
對於python常用的模組,最廣泛有提供GPU操作版本的是針對nVidia裡的CUDA 深度神經網絡 (cuDNN) – cuDNN庫的支持。

nVidia cuDNN介紹

以下為官網的介紹

NVIDIA CUDA® 深度神經網絡庫 (cuDNN) 是一個 GPU 加速的深度神經網絡原語庫。cuDNN 為標準例程提供高度調整的實現,例如前向和反向卷積、池化、歸一化和激活層。

全球的深度學習研究人員和框架開發人員都依賴 cuDNN 來實現高性能 GPU 加速。它使他們能夠專注於訓練神經網絡和開發軟件應用程序,而不是將時間花在低級 GPU 性能調整上。
cuDNN 可加速廣泛使用的深度學習框架,包括Caffe2ChainerKerasMATLABMxNetPaddlePaddlePyTorchTensorFlow。要訪問已將 cuDNN 集成到框架中的 NVIDIA 優化深度學習框架容器,請訪問NVIDIA GPU CLOUD以了解更多信息並開始使用。

另外,因為原本的numpy並不支持GPU,因此有提供了Cupy,其接口高度雷同於numpy
在大多數情況下,它可以用作直接替代品。要做的只是在您的 Python 代碼中用CuPy換numpy。
例如:

import cupy as cp
x = cp.arange(6).reshape(2, 3).astype('f')

cupy官網: https://cupy.dev/

Intel® Distribution for Python*

有少數的模組也有提供支持Intel的另一個GPU操作函式庫,如: NumPy, SciPy, and Numba

選擇適合的GPU

若希望能夠使用GPU來支持python,最重要的就是先確認你要使用哪一些函式庫,然後去尋找該函式庫所支持的GPU版本
但是以一般來說,大多都是會選用nVidia的cuDNN來做GPU版本的開發,因為他所支持的函式庫最為完整,即便numpy並不支持,也都有其他開發者開發出相似功能的函式庫作為取代

以下為cuDNN的相關介紹:https://developer.nvidia.com/cudnn

cuDNN的軟體需求

您的系統上必須安裝下列 NVIDIA® 軟體:

更多資訊請見:https://www.tensorflow.org/install/gpu?hl=zh-tw#hardware_requirements

安裝細節教學請見:https://ithelp.ithome.com.tw/articles/10249572

Posted on 1 Comment

使用conda管理python版本和函式庫

在CMD裡面使用conda

指出 Windows 命令提示符無法識別 conda 命令。這通常是因為您的系統沒有安裝 Anaconda 或 Miniconda 環境管理器,或者沒有將 Anaconda 或 Miniconda 的安裝路徑添加到系統的環境變量中。

將 Anaconda 的安裝路徑添加到系統的環境變量中

如果您的系統上沒有安裝,請前往 Anaconda 網站下載並安裝最新版本:
https://www.anaconda.com/products/individual

錯誤訊息:’conda’ is not recognized as the name of a cmdlet

安裝完成後,若我們在下conda指令時出現如下錯誤

conda : The term 'conda' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1


請打開命令提示符,輸入以下命令更新環境變量:

conda init

即可在該環境下使用conda指令

創建虛擬環境

創建環境:

conda create --name myenv

使用特定版本的 Python 創建環境:

conda create -n myenv python=3.9

使用特定版本的 Python 和多個包創建環境:

conda create -n myenv python=3.9 scipy=0.17.3 astroid babel

從 environment.yml 文件創建環境

使用終端或 Anaconda Prompt 執行以下步驟:

1. 創建environment.yml

pip freeze > environment.yml

2. 從environment.yml文件創建環境:

pip install -r environment.yml

下面是兩個environment.yml的範例
EXAMPLE 1: 簡單的設定範本

name: stats
dependencies:
  - numpy
  - pandas

EXAMPLE 2: 較複雜的設定範本

name: stats2
channels:
  - javascript
dependencies:
  - python=3.9
  - bokeh=2.4.2
  - numpy=1.21.*
  - nodejs=16.13.*
  - flask
  - pip
  - pip:
    - Flask-Testing


2. 啟動新創建的環境:

conda activate myenv

3. 驗證新環境是否安裝正確:

conda env list


也可以使用.conda info --envs

指定環境的位置

以下命令將在當前工作目錄的子目錄中創建一個名為envs的新環境:

conda create --prefix ./envs jupyterlab=3.2 matplotlib=3.5 numpy=1.21


上面的指令同時會建立jupyterlab=3.2 matplotlib=3.5 numpy=1.21為預設的package

匯出現在專案所使用的環境

1. 檢視規格列表,例如:

conda list --explicit

# This file may be used to create an environment using:<br># $ conda create –name &amp;lt;env&amp;gt; –file &amp;lt;this file&amp;gt;<br># platform: osx-64<br>@EXPLICIT<br>https://repo.anaconda.com/pkgs/free/osx-64/mkl-11.3.3-0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/numpy-1.11.1-py35_0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/openssl-1.0.2h-1.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/pip-8.1.2-py35_0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/python-3.5.2-0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/readline-6.2-2.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/setuptools-25.1.6-py35_0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/sqlite-3.13.0-0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/tk-8.5.18-0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/wheel-0.29.0-py35_0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/xz-5.2.2-0.tar.bz2<br>https://repo.anaconda.com/pkgs/free/osx-64/zlib-1.2.8-3.tar.bz2

2. 創建規格列表文件

conda list --explicit &amp;amp;amp;gt; spec-file.txt

匯入已設定好的規格

要使用 spec 文件在同一台機器或另一台機器上創建相同的環境:

conda create --name myenv --file spec-file.txt


要使用 spec 文件將其列出的包安裝到現有環境中:

conda install --name myenv --file spec-file.txt

移除conda環境

使用下列指令

conda env remove -n ENV_NAME

Posted on

了解python載入模組的位置

載入模組方式

一般來說,我們在專案裡面會使用import來載入現有模組

import cv2

了解會從哪些路徑載入-在command line內

1.取得global的site-packages路徑
python –m site

2.取得該使用者的library路徑(per-user)
python -m site –user-site

了解會從哪些路徑載入-在Python程式碼內

那麼,這個cv2的預設位置在哪邊呢?會從哪裡載入呢?
想要了解這個問題,可以在py檔案裏面使用下列程式碼來印出會再入的library位置

import sys
from os.path import dirname
print(sys.path)


可使用site.getsitepackages()或site.getusersitepackages()來了解現在會載入的函式庫位置

import sys, site
site.getsitepackages()
site.getsitepackages()

自行增加載入模組路徑

若想要自行增加模組的位置,則使用

sys.path.append(dirname(__file__))

上面程式碼代表會增加尋找位於dirname(__file__)的檔案

設定要載入的函式庫的路徑位置

有以下三種方法

  • 添加環境變量PYTHONPATH,python會添加此路徑下的模塊,在.bash_profile文件中添加如下類似行: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
  • site-packages路徑下添加一個路徑配置文件,文件的擴展名為.pth,內容為要添加的路徑即可
  • sys.path.append()函數添加搜索路徑,參數值即為要添加的路徑。

關於第二個點的介紹,請見此篇文章:https://www.itread01.com/qiqiq.html

可以先用上面的語法來尋找可能的函式庫搜尋路徑位置設定檔案的地方,找看看在上面的site-packages的資料夾裡面是否有任何的.pth檔案
一般來說,這個檔案會位於site-packages裡面,如:C:\Python39\Lib\site-packages

使用.pth設定在入路徑

或者可以直接在python的根目錄下增加python39._pth這個檔案
然後直接在檔案裏面增加要載入的路徑即可
裡面內容直接填上路徑即可,以下為一個簡單的python39._pth內容範例

放在與python.exe同一目錄

Posted on

為每個python專案建立獨立的虛擬環境

甚麼是虛擬環境

虛擬環境 (virtual environment) 是一個隔離的 Python 環境,可以讓您在同一台電腦上安裝不同版本的 Python 套件,或是不同專案之間使用不同的套件版本。

使用虛擬環境可以幫助您避免不同專案之間因為套件版本不同而造成的衝突。例如,如果您有兩個專案,一個專案需要使用舊版本的套件,而另一個專案需要使用新版本的套件,您可以在兩個專案中分別建立兩個虛擬環境,並在每個虛擬環境中安裝所需的套件版本。這樣就可以避免在不同專案中使用不同版本的套件造成的衝突。

虛擬環境還可以讓您在不影響全域環境的情況下,安裝、卸載或更新套件。這對於在測試某些套件時特別有用,因為您可以在虛擬環境中安裝或卸載套件,而不用擔心會對全域環境造成影響。

總的來說,虛擬環境可以讓您更輕鬆地在同一台電腦上進行多個 Python 專案的開發,並且可以有效地隔離不同專案之間的套件版本。

於Windows建立虛擬環境

要建立新的虛擬環境,請選擇 Python 解譯器,並建立用來存放的 .\venv 目錄:

python -m venv --system-site-packages .\venv

啟動虛擬環境:

.\venv\Scripts\activate

在不影響主機系統設定的情況下,在虛擬環境中安裝套件。首先,請升級 pip:

pip install --upgrade pip

pip list  # show packages installed within the virtual environment

之後再離開虛擬環境:

deactivate 

於macOS建立虛擬環境

要建立新的虛擬環境,請選擇 Python 解譯器,並建立用來存放的 ./venv 目錄:

python3 -m venv --system-site-packages ./venv

使用殼層特定的指令啟動虛擬環境:

source ./venv/bin/activate  # sh, bash, or zsh
. ./venv/bin/activate.fish  # fish
source ./venv/bin/activate.csh  # csh or tcsh

虛擬環境啟用時,你的殼層提示會包含 (venv) 前置字元。

在不影響主機系統設定的情況下,在虛擬環境中安裝套件。首先,請升級 pip:

pip install --upgrade pip

pip list  # show packages installed within the virtual environment

之後再離開虛擬環境:

deactivate

啟動虛擬環境

可使使用下列指令啟動已建立好的虛擬環境

source ./env/bin/activate

為你的專案設定使用函式庫的列表

匯出現在專案所使用的函式庫

python -m pip freeze > requirements.txt

安裝函式庫列表

python -m pip install -r requirements.txt