[英]What is pyproject.toml file for?
我正准備嘗試從 GitHub 下載的 Python package ,發現它沒有setup.py
,所以我無法安裝它
pip install -e <folder>
相反,package 有一個pyproject.toml
文件,該文件似乎與setup.py
通常具有非常相似的條目。
谷歌搜索引導我進入PEP-518 ,它在基本原理部分對setup.py
提出了一些批評。 但是,它並沒有明確說明應該避免使用setup.py
,或者pyproject.toml
將完全取代setup.py
。
pyproject.toml
是用來替換setup.py
的東西嗎? 或者 package 是否應該同時帶有pyproject.toml
和setup.py
?
如何在可編輯的 state 中安裝帶有pyproject.toml
的項目?
是的, pyproject.toml
是PEP 518的指定文件格式,其中包含 Python 項目的構建系統要求。
這解決了構建工具依賴雞和雞蛋的問題,即pip
可以讀取pyproject.toml
以及可能需要什么版本的setuptools
或wheel
one。
如果您需要setup.py
進行可編輯安裝,您可以在setup.py
中使用 shim:
#!/usr/bin/env python
import setuptools
if __name__ == "__main__":
setuptools.setup()
pyproject.toml
是替換setup.py
的新統一 Python 項目設置文件。 可編輯的安裝仍然需要一個setup.py
: import setuptools; setuptools.setup()
import setuptools; setuptools.setup()
要使用pyproject.toml
,請運行python -m pip install.
然后,如果項目使用poetry
而不是pip
,您可以像這樣安裝依賴項(到%USERPROFILE%\AppData\Local\pypoetry\Cache\virtualenvs
):
poetry install
然后運行pytest 之類的依賴項:
poetry run pytest tests/
並預提交(使用.pre-commit-config.yaml
):
poetry run pre-commit install
poetry run pre-commit run --all-files
目前在 Python 社區中流行多種打包工具,雖然setuptools
似乎仍然很流行,但它不再是事實上的標准。 這種情況給最終用戶和開發人員帶來了許多麻煩:
setuptools
的軟件包,如果未安裝setuptools
,則從發行版的源代碼/構建安裝可能會失敗;pip
從源代碼安裝基於其他打包工具的包。 必須先安裝打包工具,然后使用工具特定的命令安裝/構建分發 package; pyproject.toml
是PEP 517和PEP 518為解決這些問題而引入的新配置文件:
...想想為項目生成構建工件所需的(粗略)步驟:
- 項目的源代碼簽出。
- 安裝構建系統。
- 執行構建系統。
此 PEP [518] 涵蓋步驟 #2。 PEP 517涵蓋了第 3 步……
任何工具也可以使用自己的部分(表)擴展此文件以接受特定於工具的選項,但這取決於他們而不是必需的。
對於基於setuptools
的包pyproject.toml
並不是嚴格意義上的替換setup.py
,而是為了確保它在仍然需要時正確執行。 對於其他打包工具——是的,它是:
如果存在
build-backend
鍵,則優先,源代碼樹遵循指定后端的格式和約定(因此不需要setup.py
,除非后端需要它)。 項目可能仍希望包含setup.py
以與不使用此規范的工具兼容。
“可編輯安裝”是setuptools
的功能,因此PEP 517不支持它:
Install Options:
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools "develop mode")
要以可編輯模式安裝基於setuptools
的 package,它需要一個setup.py
文件,其中至少包含最少的內容:
from setuptools import setup
setup()
僅回答這部分,因為 rest 已被其他人很好地解釋:
如何在可編輯的 state 中安裝帶有 pyproject.toml 的項目?
克隆項目並運行poetry install
以首先創建它的正常安裝。
使用poetry env info -p
獲取詩歌創建的虛擬環境的路徑。 它可能類似於<absolute path of your cloned project/.venv
。 然后檢查其中的site-packages
目錄的路徑是什么。 它取決於您的 Python 版本,類似於<absolute path of your cloned project/.venv/lib/python3.9/site-packages
。
在這個site-packages
中創建一個.pth
文件。 它應該包含一行文本,其中包含 package 的完整路徑,以便在可編輯模式下安裝:
echo "<absolute path of your cloned project>" > "<absolute path of your cloned project/.venv/lib/python3.9/site-packages/package_name.pth"
2021 年 6 月,描述基於pyproject.toml
的構建的可編輯安裝的PEP-660已被接受。
在這個 PR中,它對poetry
的實現正在進行中。
所以我們需要等待它完成,合並並發布新的poetry
版本。
除了上面鏈接的那些,我的主要來源是“pip install -e.等價物?” - github.com/python-poetry/poetry 中的問題 #34 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.