iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
Software Development

Python 數據專案從頭做起:跟著一個專案學資料工程系列 第 3

Day 2|Stage 0(2/3):從零建立資料工程專案,先把專案架構和 Python 虛擬環境準備好

  • 分享至 

  • xImage
  •  

現在終於可以開啟 VS Code。還沒有 VS Code 的朋友可以先到官方網站下載安裝(這裡)。這裡就不另外介紹安裝流程,我們直接開始建立專案。

先建立專案架構

建立專案架構前,我們先想一個問題:一個專案裡面應該要有什麼?

最直覺的想法可能是原始資料要有地方放、寫好的 Code 要有地方放,還需要一份 README 告訴別人「這個專案到底是什麼」。所以我們先建立一個最基本的專案結構:

MRT_project/
├── data/ (專案使用的資料)
├── src/ (Python 程式碼)
├── tests/ (測試程式)
├── README.md (說明這個專案是什麼,以及如何使用)
└── requirements.txt (記錄 Python 專案需要的套件)(先不用手動建立)

目前先不用把所有未來可能需要的資料夾全部建立起來,等後面的專案真的需要 dbt、Airflow 等工具時,再加入對應的結構。那為什麼不把所有東西通通丟在同一個資料夾就好?其實專案很小的時候可能真的沒差。但隨著程式碼、資料、測試和設定檔越來越多,如果一開始完全沒有分類,專案很快就會變得很難找東西,也很難讓其他人理解。
另外有一個很重要的原則:原始資料盡量不要直接修改。
假設我們在後面的資料處理過程中,不小心刪掉了一些原本以為不需要的資料,如果原始資料還保留著,就可以回頭確認,到底是原始資料本來就沒有?還是我們的處理流程把它弄不見了?因此保留 原始資料(Raw Data),也能讓後續的資料處理可以重新執行,而不是改壞之後就回不去了。

建立 Python 虛擬環境

專案的基本骨架有了,接下來要準備 Python 的執行環境。為什麼需要虛擬環境?

因為 Python 專案通常會使用許多外部套件(Package),而且不同專案需要的套件和版本可能不同。如果所有專案都共用同一套 Python 環境,當不同專案需要不同版本時,就可能產生相依套件或版本衝突。所以我們會替這個專案建立一個獨立的 虛擬環境(Virtual Environment)。打開 VS Code 的終端機(Terminal),確認目前的位置是在專案根目錄:

python -m venv .venv

這個指令會在專案裡建立一個 .venv 資料夾。不過,建立完成不代表已經啟用。如果使用 Windows PowerShell,可以執行:

.\.venv\Scripts\Activate.ps1

成功啟用之後,Terminal 前面通常會看到(.venv),這代表我們接下來使用 Python 與安裝套件時,會在這個專案的虛擬環境裡進行。.venv 資料夾裡面到底放了什麼,目前不用一個一個研究,只要先知道它讓這個專案擁有自己獨立的 Python 執行環境。我們可以先使用 pip查看目前環境已經有哪些 Package:

python -m pip --version
python -m pip list

虛擬環境準備完成後,就可以開始安裝這個專案需要的 Python套件。這些套件現在都會安裝在剛剛建立的 .venv 中,而不是和其他 Python 專案全部混在一起。至於每一個套件到底負責什麼,我們等專案真的使用到它時再介紹。

python -m pip install pandas requests python-dotenv boto3 "psycopg[binary]" pytest ruff

requirements.txt 是做什麼的?

假設今天我把 GitHub Repository(repo,儲存庫) 給你,你拿到了我的 Python Code,但是你的電腦沒有安裝我使用的套件。那程式還是跑不起來。所以我們需要記錄這個 Python 專案到底依賴哪些套件與版本?

python -m pip freeze > requirements.txt

把目前 Python 環境中的 Package 與版本寫進 requirements.txt。
之後其他人拿到這個專案,就可以透過:

python -m pip install -r requirements.txt

安裝這個專案需要的 Python 套件。
所以 requirements.txt 並不是單純「列出我裝了什麼」,它真正的用途是幫助其他人重建這個專案需要的 Python 環境。順帶一提,指令中的-m 是 Python 的參數,代表讓目前使用的 Python interpreter 執行指定的 module。

Dependencies 是什麼?

在 Python 專案裡,相依套件(Dependency)可以理解成「我的程式要正常運作,還需要依賴哪些外部 Package。」例如我們的程式如果寫了:

import pandas as pd

那 pandas 就是這個專案的 dependency。因為如果另一台電腦沒有安裝 pandas,即使拿到了完全一樣的 Python 程式碼,也沒有辦法正常執行。而 dependency 有時候還會再依賴其他 dependency。例如你安裝 pandas 時,pandas 本身也可能需要其他套件才能運作。因此一個專案真正需要的環境,通常不只有你親手 pip install 的幾個 Package。這也是為什麼我們需要 requirements.txt,把目前環境中的 dependencies 與版本記錄下來,讓其他人能夠重建這個專案需要的 Python 環境。

專案準備好了嗎?

到這裡,我們已經有:

Project Structure
        ↓
Python Virtual Environment
        ↓
Project Dependencies
        ↓
requirements.txt

專案終於開始有點樣子。下個問題。如果我們明天修改了 Code,後天又修改一次,結果突然發現:「我昨天那版明明還可以跑!」怎麼辦?這就是下一篇要處理的事情。

下一篇:Day 3|Stage 0(3/3):Git 版本控制與指令


上一篇
Day 1|Stage 0(1/3):資料工程到底在做什麼?
系列文
Python 數據專案從頭做起:跟著一個專案學資料工程3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言