如何使用 uv 取代 pip 來改善 Python 專案的開發流程

關於 uv

uv 是一個以 Rust 撰寫的 Python 套件管理工具,安裝套件的速度比 pip 還要快 10-100 倍,有部分開源專案的官網文件的安裝步驟也已經預設使用 uv 取代 pip(如下圖的 Prefect),如果是想要在 Docker 中採用 uv 的話可以參考一下我之前寫的 uv + Docker 的教學 文章 。

近期因為 uv 持續推出很多好用的功能,到現在我所有的專案都已經替換成 uv 來開發,不再使用原本的 pip 了,所以這次想要來整理並分享我自己在開發 Python 專案時使用 uv 的流程。


基本安裝與設定

安裝 uv

# For MacOS
brew install uv

# For Windows
powershell -ExecutionPolicy ByPass -c "irm <https://astral.sh/uv/install.ps1> | iex"

其他詳細安裝方式可參考:https://docs.astral.sh/uv/getting-started/installation/#installing-uv

閱讀更多»

如何評估開源專案的價值與健康度,以及判斷是否適合導入與採用?

在資料工程師的工作中,很常需要使用到開源工具來解決問題,像是 Apache Airflow 或 FastAPI 都是可商用且已經被泛用的開源工具,但我們該如何評估一個新的開源專案值不值得使用或研究呢? 這篇文章我整理了網友和我自己的經驗,以 GitHub 為例,分享有哪些重點是我們在選擇 Open Source 時可以納入考慮的。

最優先要考慮的是需求

我認為所有的考量都要以需求出發,思考這個開源工具是否真的能解決目前遇到的問題,或是達成使用者提出的需求,並且這個工具的規範在公司內是合法合規的,都確認後才能繼續往下探討其他指標。

其他指標我目前把他們分成幾大類:

  1. 功能性
  2. 文件完整性
  3. 維護活躍度
  4. 社群支持度
  5. 程式碼品質與穩定性
  6. 安全性
  7. 相依相容性

開源專案的參考指標

1. 功能性

  • 功能完整性: 工具的功能是否完整且穩定?是否缺少關鍵功能?
  • 易用性:
    • 這個工具是否容易安裝、設定和使用?是否有清晰的 API 或介面?
    • 是否可用 pip install 安裝?
    • 是否提供 Dockerfile / Docker Compose 的方式來部署?
  • 效能:
    • 工具的效能是否能處理你的資料量和運算量?是否有相關的效能測試報告?
    • 這個工具在 ELT、分析、視覺化或建模方面的能力如何?
以 Apache Airflow 為例,GitHub 文件上清楚寫了可以使用 pip 或是 Docker Compose 的方式來安裝
閱讀更多»

雲端架構部署救星!介紹 Terraform 是如何大幅改善雲端基礎建設的建立流程


過去在建立基礎架構時有許多痛點

當我們想要在雲端上建立各種服務時,通常都是透過 UI 的方式進行,但當架構越來越複雜,甚至還需要整組搬遷的時候,就會遇到很多困難,例如重新設定後可能剛好忘記 region 是設在哪、這個專案是用哪一個 Docker image,或這台機器的規格到底是幾個 CPU 多少記憶體。

整體來說,傳統建立基礎架構時會遇到以下的痛點

  • UI 操作過程繁雜
  • 大量人工操作,易出錯且難以維持一致性,增加除錯時間
  • 難以自動化,導致部署效率低
  • 無法版本控管、追蹤變更,增加操作風險
  • 無法重複利用,缺乏模組化設計,每次建立的成本都很高

所以我們過去在建立基礎架構時,常常需要花費大量時間與人力,效率太差,甚至可能會有許多都是重複性高的操作,而 Terraform 就是可以解決這些痛點的重要工具。

Terraform 是什麼?

Terraform 是一種「基礎架構即程式碼」工具 (Infrastructure as Code, Iac) ,讓我們使用人類易讀的設定檔中定義雲端和地端資源,並可對這些檔案進行版本控管、可重複使用和分享共用,讓所有基礎架構能在配置和管理上達成一致。

Terraform 如何運作

Terraform 主要是透過 Providers 來跟特定的雲端 API 做溝通,例如 GCP providers, AWS providers 等

在使用 Terraform 時主要有三個步驟:

閱讀更多»

UNION ALL 語法其實有陷阱?介紹 BigQuery 最新的 UNION ALL BY NAME

SQL 中的 UNION ALL 其實有陷阱?

在查詢結構化資料庫時,常會使用到一個 SQL 語法:UNION ALL,但其實這個語法背後有一個很大的坑,就是在合併資料時,UNION ALL 其實會按照 SELECT 的順序來合併 (Positional 特性) ,所以當欄位資料型態一樣時,資料就會無視欄位名稱被按照順序合併起來。

按照順序來合併資料是什麼意思呢?
讓我們看一下範例

UNION ALL 實際上會造成什麼問題?

在這個範例中,我們想要讓名稱為 NumberEmoji 分別 UNION 在各自的欄位,由於這些值都是字串型態,所以 UNION ALL 是會成功執行的,但我們會發現結果並不是我們想要的那樣,因為我們的 SQL 中 SELECT 欄位的順序是錯的,UNION ALL 並不會自動幫我們依據欄位名稱去合併,這個問題除了 BigQuery 之外,其他資料庫像是 MySQL 或 PostgreSQL 也會有一樣的情況

BigQuery 新功能 – UNION ALL BY NAME

閱讀更多»

【GCP】如何建立與使用一個具有 IAM 權限控管的 Cloud Run Service

本文說明如何建立一個有鎖 IAM 權限的 GCP Cloud Run Service/Job 並使用 Python 送 Request

Step 1: 建立 Docker image 並上傳到 GCP Artifact Registry

1. 先使用 gcloud 指令進行身份驗證

    登入並授權 gcr.io,才能順利將 image 下載到本機(如果是直接使用 GCP Cloud Shell 就可以不用這一步)

      2. 建立 Docker Image 並推送到 GCP Artifact Registry

        • --platform linux/amd64: 如果是在非 linux 的作業系統(如:MacOS, Windows)中進行 image build 就需要另外指定 image 系統,不然會無法在 Cloud Run 上順利運行

        Step 2: 部署 Cloud Run 並設定 Security

        前往 GCP Artifact Registry 找到剛剛推上去的 Image,並將 image 部署到 Cloud Run(點擊如下圖的 Deploy to Cloud Run)

        部署後可以在該 Cloud Run Service 的 Security 頁面看到預設是 Require authentication (Manage authorized users with Cloud IAM),代表只有 IAM 許可的人可以呼叫這個 Service

        Step 3: 確認 IAM permission

        閱讀更多»