python庫構(gòu)建之pyproject.toml配置文件詳解
前言
pyproject.toml 是一個配置文件,用于定義 Python 項目的構(gòu)建系統(tǒng)和相關(guān)的元數(shù)據(jù)。它是 Python 社區(qū)為了解決項目構(gòu)建和依賴管理問題而引入的一種標準化方式,最初由 PEP 518 提出。pyproject.toml 文件被廣泛使用,尤其是在構(gòu)建工具(如 Poetry 和 Flit)中,用來替代傳統(tǒng)的 setup.cfg 文件。
主要用途
定義構(gòu)建系統(tǒng):
pyproject.toml文件中可以指定構(gòu)建工具及其版本,如setuptools或poetry,以及這些工具所需的依賴項。這使得項目的構(gòu)建環(huán)境更加可控和可重復。
項目元數(shù)據(jù):
- 包括項目的名稱、版本、描述、作者、許可證等信息,可以在
pyproject.toml文件中定義。這些信息可以被構(gòu)建工具或包管理工具讀取和使用。
- 包括項目的名稱、版本、描述、作者、許可證等信息,可以在
依賴管理:
- 該文件可以管理項目的依賴關(guān)系,包括運行時依賴、開發(fā)時依賴等,類似于
requirements.txt,但更加結(jié)構(gòu)化和靈活。
- 該文件可以管理項目的依賴關(guān)系,包括運行時依賴、開發(fā)時依賴等,類似于
配置構(gòu)建工具的行為:
- 對于不同的構(gòu)建工具,如
setuptools、poetry、black、isort等,可以在pyproject.toml中配置其行為。
- 對于不同的構(gòu)建工具,如
文件結(jié)構(gòu)
一個典型的 pyproject.toml 文件由幾個部分組成,每個部分對應不同的功能和配置信息。以下是LlamaFactory示例:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[tool.ruff]
target-version = "py38"
line-length = 119
indent-width = 4
[tool.ruff.lint]
ignore = ["C408", "C901", "E501", "E731", "E741", "W605"]
select = ["C", "E", "F", "I", "W"]
[tool.ruff.lint.isort]
lines-after-imports = 2
known-first-party = ["llamafactory"]
known-third-party = [
"accelerate",
"datasets",
"gradio",
"numpy",
"peft",
"torch",
"transformers",
"trl"
]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
docstring-code-format = true
skip-magic-trailing-comma = false
line-ending = "auto"
這個 pyproject.toml 文件配置了項目的構(gòu)建系統(tǒng)以及使用 ruff 進行代碼檢查和格式化的相關(guān)設置。以下是各部分的詳細解釋:
1. [build-system]
requires: 指定了項目的構(gòu)建系統(tǒng)依賴項。這里要求使用setuptools版本 61.0 或更高版本。這意味著在構(gòu)建這個項目時,Python 環(huán)境中必須安裝setuptools,且版本不低于 61.0。build-backend: 指定了用于構(gòu)建項目的后端工具,這里使用的是setuptools.build_meta。這意味著setuptools將作為構(gòu)建過程的核心工具。
2. [tool.ruff]
target-version: 指定了代碼的目標 Python 版本,這里是 Python 3.8 (py38)。ruff將根據(jù)這個版本進行相應的檢查和優(yōu)化。line-length: 指定了代碼行的最大長度,超過這個長度會被視為格式錯誤。這里設置為 119 個字符。indent-width: 指定代碼縮進的寬度,這里設置為 4 個空格。
3. [tool.ruff.lint]
ignore: 指定了一些要忽略的規(guī)則或錯誤代碼。列出的錯誤代碼將不會在代碼檢查時觸發(fā)。select: 指定了要檢查的錯誤或警告類別。只有屬于這些類別的檢查才會被啟用。
4. [tool.ruff.lint.isort]
lines-after-imports: 指定在導入語句之后應保留的空行數(shù),這里設置為 2 行。known-first-party: 列出了項目中的第一方模塊,即llamafactory,用于在導入排序時識別項目內(nèi)部的模塊。known-third-party: 列出了已知的第三方庫,這些庫將在導入排序時與其他模塊區(qū)分開來。
5. [tool.ruff.format]
quote-style: 指定字符串使用的引號樣式,這里設置為double,即雙引號。indent-style: 指定縮進風格,這里使用space(空格)而非tab。docstring-code-format: 設置為true,表示在文檔字符串(docstring)中也會應用代碼格式化規(guī)則。skip-magic-trailing-comma: 設置為false,意味著即使添加魔術(shù)尾逗號(magic trailing comma),也不會跳過格式化。line-ending: 設置為auto,表示根據(jù)操作系統(tǒng)的默認設置自動選擇行結(jié)尾符。
小結(jié)
這個 pyproject.toml 文件主要配置了項目的構(gòu)建系統(tǒng),并詳細定義了 ruff 工具用于代碼風格檢查和格式化的規(guī)則。這些設置幫助確保代碼的一致性和質(zhì)量,減少錯誤,并遵循團隊的編碼規(guī)范。
工作流程
在執(zhí)行 pip install . 時,pyproject.toml 文件會在構(gòu)建和安裝 Python 項目的過程中被引用。具體流程如下:
1. 識別 pyproject.toml 文件
- 當你在項目的根目錄執(zhí)行
pip install .命令時,pip會首先檢查該目錄下是否存在pyproject.toml文件。 - 如果存在這個文件,
pip會將其視為該項目的構(gòu)建配置文件,并按照其中的內(nèi)容來指導接下來的構(gòu)建過程。
2. 解析 build-system 部分
pip首先讀取pyproject.toml文件中的[build-system]部分。這一部分定義了構(gòu)建項目所需的依賴項以及構(gòu)建后端(即構(gòu)建工具)。requires: 列出了構(gòu)建這個項目所需的 Python 包。在執(zhí)行pip install .時,pip會確保這些包已經(jīng)安裝。如果這些包沒有安裝,pip會首先安裝這些依賴。build-backend: 指定構(gòu)建項目所使用的后端工具,比如setuptools.build_meta或poetry.core.masonry.api。pip會調(diào)用這個工具來構(gòu)建項目。
3. 構(gòu)建源分發(fā)包(SDist)和/或輪子包(Wheel)
- 一旦
pip安裝了構(gòu)建所需的依賴并加載了構(gòu)建后端,構(gòu)建后端會被調(diào)用來生成源分發(fā)包(SDist)和/或輪子包(Wheel)。- 如果使用
setuptools.build_meta,它會讀取項目的setup.py或setup.cfg文件來指導包的構(gòu)建。 - 這些構(gòu)建輸出會保存在臨時目錄中,用于接下來的安裝步驟。
- 如果使用
4. 安裝項目
pip使用生成的包(SDist 或 Wheel)安裝項目到目標環(huán)境中(通常是當前 Python 環(huán)境)。- 如果項目依賴其他包,
pip會從pyproject.toml或setup.py中的install_requires列表中識別并安裝這些依賴。
5. 其他工具配置
pyproject.toml中的其他部分,如[tool.ruff],可能會被相應的工具在構(gòu)建或開發(fā)過程中引用。雖然這些部分不會直接影響pip install .的過程,但它們在開發(fā)環(huán)境中依然重要。
簡化的執(zhí)行流程
pip檢查并加載pyproject.toml文件。- 解析
build-system,安裝構(gòu)建所需的依賴。 - 使用指定的構(gòu)建后端構(gòu)建項目(生成 SDist 和/或 Wheel)。
- 安裝生成的包及其依賴。
總結(jié)
pyproject.toml 文件在 pip install . 的過程中會被 pip 引用,以確定如何構(gòu)建和安裝項目。pip 主要使用其中的 [build-system] 部分來加載構(gòu)建工具和依賴,然后調(diào)用這些工具生成項目的分發(fā)包,并最終將其安裝到當前環(huán)境中。
到此這篇關(guān)于python庫構(gòu)建之pyproject.toml配置文件詳解的文章就介紹到這了,更多相關(guān)python庫構(gòu)建pyproject.toml內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用OpenPyXL庫操作Excel表的操作指南
在現(xiàn)代辦公中,Excel表格無疑是處理數(shù)據(jù)、生成報告和分析信息的得力助手,無論是財務統(tǒng)計、數(shù)據(jù)整理還是業(yè)務分析,Excel 都扮演著不可或缺的角色,然而,手動處理Excel表格既費時又容易出錯,故本文給大家介紹了Python使用OpenPyXL庫操作Excel表的操作指南2024-11-11

