iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0

[Note: 這一篇要改放到 Ch. 26 之前]

除了自己寫程式之外,我們還可以直接使用別人寫好的程式,稱為套件(package)。有很多很厲害的功能,只要安裝套件就可以直接使用。

要去哪裡找套件

各個語言都會有自己的套件倉庫,可以用功能關鍵字來搜尋需要的套件。例如 Python 最主流的套件倉庫就是 pypi.org。而在這個頁面裡,有個「Source (原始碼)」的按鈕。

Github 上也有很多

按下「Source」按鈕後,會到我們之前上傳專案的 Github 頁面。大部份的套件都會在倉庫及 Github 都有頁面。


如何安裝套件

有管理的專案比較好裝

有些套件,會需要先安裝更基礎的套件,這個情況,我們把它稱之為「套件依賴」。為了比較方便使用,我們都會使用專案管理工具來設定,只要寫下我們真正需要的套件及版本,專案管理工具就會幫我們把其它依賴的東西都處理好。

Python 用 UV 來管理

初始化專案

在 Python 中,現在的主流是使用 uv 這個工具來管理 python 專案。我們先用 homebrew 來安裝 uv 指令:

brew install uv

接著用 mkdir 專案名稱 && cd 專案名稱,建立並切換到新的專案資料夾中。再使用 uv init 來初始化 uv 專案。

$ mkdir my_project && cd my_project
$ uv init

找到設定專案資訊的檔案: pyproject.toml

專案初始化之後,會在資料夾下看到一張 pyproject.toml ,這是 uv 用來設定專案的資訊,及需要套件的地方。一開始會長得像這樣:

[project]
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []

例如要安裝 pytest,我們要在終端機中,輸入

uv add --dev pytest

這樣會把把套件名稱及版本號碼加到這個檔案裡,dependencies 陣列裡。(dependencies 是「依賴」的意思。)

下載套件

還是回到終端機,輸入 uv sync,就會把需要的套件下載安裝到專案裡了。


用其它人寫的程式時要注意什麼

當我們使用別人寫好的工具時,有幾個重點要考慮

  • 有沒有安全性問題 -> 查 Github 上的問題回報 (issue)或程式新聞
  • 有沒有持續維護 -> 看資源庫網頁上的最後更新日期及問題回報頁面的互動
  • 有問題或不會用時,找得到說明或支援嗎 -> 看文件寫的好不好,及 Github 上的星星數

另外還有一個很重要的事:這是個框架 (Framework) 嗎?

什麼是框架

有些套件比較像是工具包,例如資料處理常用的「NumPy」。在專案中你可以依你自己習慣的方式跟典範寫程式,當需要用到資料處理的功能時,在主動去呼叫 NumPy 提供的功能就好了。這種的通稱為 「函式庫」 (Library)

但有些套件會說明這是一個「框架 (framework)」,代表了它已經想好這個功能需要的整體結構,而且把共同的程式都寫好了,你使用框架時需要做的事,是看它的說明文件與架構,並在他需要你自行定理的部份,加上程式碼。這麼一來,程式運作起來時,整體的控制權在框架手上。框架會在它需要的時候,呼叫你寫出來的程式碼。

一般來說,當應用程式套件有完整的架構,通常是「框架」型的。例如 Python 的 Django、Ruby 語言上非常好用的 Ruby on Rails 框架,以及 Elixir 語言上的 Phoenix,都是有自己的觀點與做事哲學的框架。


營火旁的重點回顧

  • 要使用別人寫好的程式套件,先設定好專案管理會輕鬆很多
  • 各個語言有自己的套件倉庫,可以依功能搜尋。也可以在 github 上找
  • Python 用 uv 做專案管理,在 pyproject.toml 裡設定相依套件
  • 使用套件時注意安全性、是否有維護及使用資訊是否容易找到
  • 套件有分 函式庫 (Library)框架 (Framework) ,用法不太一樣。

地圖


上一篇
Ch 26. 加新功能時,如何確定原先功能沒有壞?
下一篇
附錄 A. 如何在 mac 上設定開發環境
系列文
Just enough code with AI: 給新手們的程式設計世界觀29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言