2 回答
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
2022 年 7 月更新:如果您的 TOML 文件使用 setuptools 作為其構(gòu)建系統(tǒng),setuptools 將愉快地創(chuàng)建和安裝命令行腳本。例如,我的pyproject.toml文件是這樣開(kāi)頭的:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
pyproject.toml使用這樣的條目擴(kuò)展您的文件,命名包、模塊和入口點(diǎn)函數(shù)名稱(chēng):
[project.scripts]
my-client = "my_package.my_module:main_cli"
然后運(yùn)行安裝序列:
pip3 install .
setuptools 將在我的 Py3.9 虛擬環(huán)境的 bin 目錄 (~/.virtualenvs/py39/bin) 中為我安裝一個(gè)在適當(dāng)位置命名的 shell 腳本my-client。
我在做類(lèi)似的事情,升級(jí)一個(gè)有 的包setup.py,雖然我沒(méi)有現(xiàn)有的腳本。重寫(xiě)為 usingpyproject.toml我完全刪除了舊setup.py文件。
FWIW 我意識(shí)到 OP 要求安裝現(xiàn)有腳本的方法,但我沒(méi)有提供。這個(gè)答案告訴 setuptools 創(chuàng)建和安裝新腳本。
2023 年 2 月更新:感謝所有投票。如果您正在偷工減料以滿(mǎn)足任意管理截止日期,只需復(fù)制粘貼此短pyproject.toml文件并進(jìn)行調(diào)整:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "my_client"
version = "1.2.3"
authors = [{name="Ubr Programmer", email="ubr@gmailington.com" }]
description = "Client for my awesome system"
readme = "README.md"
dependencies = ["cachetools","requests"]
requires-python = ">=3.9"
[project.scripts]
my-client = "my_package.my_module:main_cli"
[project.urls]
"Homepage" = "https://github.com/your_name_here/something"
"Bug Tracker" = "https://github.com/your_name_here/something/issues"
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
pyproject.toml 中是否有適當(dāng)?shù)奈恢脕?lái)指定命令行腳本?
PEP566?(Metadata 2.1) 只定義了Core metadata specifications。因此,答案取決于您的構(gòu)建系統(tǒng)(注意:PEP518 定義了構(gòu)建系統(tǒng)概念)。
如果您使用現(xiàn)有的構(gòu)建工具,例如setuptools、poetry和flit,您只能考慮在pyproject.toml中添加此類(lèi)選項(xiàng),前提是該工具支持pyproject.toml中的命令行腳本 (?console_scripts)。當(dāng)然,如果你有自己的構(gòu)建工具,你需要實(shí)現(xiàn)一個(gè)解析器來(lái)解析pyproject.toml中的命令行腳本。
最后,您可以查看以下列表以了解哪些主要構(gòu)建系統(tǒng)支持pyproject.toml中的命令行腳本 (?console_scripts)?(2020/Oct):
設(shè)置工具:根據(jù)PEP621尚未實(shí)施
poetry:是的,這是實(shí)現(xiàn)的一部分。
flit:是的。
添加回答
舉報(bào)
