2 回答
TA贡献1906条经验 获得超3个赞
2022 年 7 月更新:如果您的 TOML 文件使用 setuptools 作为其构建系统,setuptools 将愉快地创建和安装命令行脚本。例如,我的pyproject.toml文件是这样开头的:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
pyproject.toml使用这样的条目扩展您的文件,命名包、模块和入口点函数名称:
[project.scripts]
my-client = "my_package.my_module:main_cli"
然后运行安装序列:
pip3 install .
setuptools 将在我的 Py3.9 虚拟环境的 bin 目录 (~/.virtualenvs/py39/bin) 中为我安装一个在适当位置命名的 shell 脚本my-client。
我在做类似的事情,升级一个有 的包setup.py,虽然我没有现有的脚本。重写为 usingpyproject.toml我完全删除了旧setup.py文件。
FWIW 我意识到 OP 要求安装现有脚本的方法,但我没有提供。这个答案告诉 setuptools 创建和安装新脚本。
2023 年 2 月更新:感谢所有投票。如果您正在偷工减料以满足任意管理截止日期,只需复制粘贴此短pyproject.toml文件并进行调整:
[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贡献1784条经验 获得超8个赞
pyproject.toml 中是否有适当的位置来指定命令行脚本?
PEP566 (Metadata 2.1) 只定义了Core metadata specifications。因此,答案取决于您的构建系统(注意:PEP518 定义了构建系统概念)。
如果您使用现有的构建工具,例如setuptools
、poetry
和flit
,您只能考虑在pyproject.toml中添加此类选项,前提是该工具支持pyproject.toml中的命令行脚本 ( console_scripts
)。当然,如果你有自己的构建工具,你需要实现一个解析器来解析pyproject.toml中的命令行脚本。
最后,您可以查看以下列表以了解哪些主要构建系统支持pyproject.toml中的命令行脚本 ( console_scripts
) (2020/Oct):
设置工具:根据PEP621尚未实施
poetry:是的,这是实现的一部分。
flit:是的。
添加回答
举报