如何從 requirements.txt 載入套件並用於 setup.py
在 Python 開發中,套件管理是專案維護的重要一環。當我們使用 setuptools 來建立 Python 套件時,通常會在 setup.py 中指定 install_requires 來管理專案的套件。
然而,當專案的套件數量較多時,直接在 setup.py 內手動列出所有套件可能不太方便。因此,我們可以將套件整理到 requirements.txt,然後在 setup.py 內動態讀取,確保專案的套件統一且易於維護。
setup.py 是什麼?
setup.py 是 Python 套件的安裝與發佈腳本,負責定義套件名稱、版本、依賴關係,並支援打包與發佈。開發者可以透過 pip install . 安裝專案,或使用 python setup.py sdist bdist_wheel 來打包套件,甚至上傳至 PyPI 讓其他人使用。
讀取 requirements.txt 並加到 setup.py
我們可以使用以下方式,在 setup.py 內讀取 requirements.txt 內容,並將其設為 install_requires:
from setuptools import setup
# 讀取 requirements.txt
with open('requirements.txt') as fid:
requires = [line.strip() for line in fid]
setup(
name="my_package",
version="0.1",
install_requires=requires,
packages=["my_package"]
)
requirements.txt 內容範例
我們的 requirements.txt 可能會長這樣:
numpy>=1.21.0
pandas==1.3.5
requests
numpy>=1.21.0表示至少需要 1.21.0 版本的 NumPy。pandas==1.3.5限制 Pandas 必須是 1.3.5 版本。requests沒有指定版本,表示安裝最新穩定版本。
為什麼這樣做?
這樣的做法比直接在 setup.py 內手動列出依賴更具優勢,因為:
- 易於維護:可以直接編輯
requirements.txt,無需修改setup.py。 - 開發與部署一致:開發者和部署環境可以使用相同的
requirements.txt來安裝依賴,減少環境不一致的風險。 - 可讀性更好:
requirements.txt是 Python 社群常用的格式,易於管理和分享。
進階技巧:忽略空行與註解
在實際應用中,我們可能會在 requirements.txt 內加入註解或空行,例如:
# 核心依賴
numpy>=1.21.0
pandas==1.3.5
# 網路請求
requests
這時候,可以在 setup.py 內過濾掉註解與空行:
with open('requirements.txt') as fid:
requires = [line.strip() for line in fid if line.strip() and not line.startswith("#")]
這樣,我們就能確保 install_requires 只包含有效的套件名稱,避免錯誤。
總結
透過 requirements.txt 來管理 install_requires,我們可以提升 Python 專案的可維護性與一致性,讓開發、部署更加順暢。
同時,setup.py 作為 Python 套件的安裝腳本,能夠幫助我們輕鬆打包與發佈專案。如果你的專案還沒有這樣做,不妨試試看,讓專案管理更加高效! 🚀

留言
張貼留言