You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于pyproject的Python包中包含Shell脚本?

在pyproject.toml中安装Shell脚本的简便方法

有几种比编写Python包装函数更简便的方案,能达到旧setup.py里scripts参数的效果:

1. 直接在pyproject.toml中沿用setuptools的scripts配置

setuptools在新规范下依然兼容scripts参数,不需要完全抛弃旧写法。在pyproject.toml的project区块中添加:

[project]
# 其他项目配置...
scripts = ["scripts/myscript.sh"]

安装后脚本会直接被复制到环境的bin目录(Windows对应Scripts目录),和旧setup.py的效果完全一致。

2. 用极简Python包装脚本配合console_scripts

如果想贴合新的入口点规范,可以写一个几乎零开销的Python包装脚本,比subprocess调用更高效:
先在项目里创建一个简单的Python文件,比如src/my_package/cli.py:

#!/usr/bin/env python
import os
import sys
from pathlib import Path

# 定位Shell脚本的路径,根据你的项目结构调整层级
script_path = Path(__file__).parent.parent.parent / "scripts" / "myscript.sh"
# 直接替换Python进程为Shell脚本,无额外开销
os.execv(script_path, [script_path.name] + sys.argv[1:])

然后在pyproject.toml中配置入口点:

[project.scripts]
myscript = "my_package.cli:main"

这里的main可以不用定义,因为脚本在执行到os.execv时就替换了进程,不过setuptools要求入口点格式合法,随便写个存在的函数名或者直接用模块名也可以。

3. 用data_files手动指定安装路径

如果需要自定义安装路径,可以用data_files配置:

[tool.setuptools.data_files]
"bin" = ["scripts/myscript.sh"]

这会把脚本直接安装到环境的bin目录,注意Windows系统需要把路径改成Scripts,类Unix系统通用。

内容的提问来源于stack exchange,提问作者ZJaume

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:45:27