小编Lut*_*ang的帖子

使用 setuptools 和 pyproject.toml 分发 shell 脚本

我正在尝试将 shell 脚本与 Python 包一起分发。理想情况下,shell 脚本在我运行时安装pip install my_package。我从这篇文章中读到,我的预期行为正是scripts关键字 ofsetuptools.setup所提供的。例如,该脚本my_script将使用以下setup.py脚本进行安装:

setup(
    ...
    scripts=['my_script'],
    ... 
) 
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用上述方法,原因有两个:

  1. 官方文档没有提到这种行为。我不知道我是否还能继续这样下去。
  2. 我的整个项目都是建立在pyproject.toml, 没有setup.py. 虽然pyproject.toml已经提供了[project.scripts]表格,但正如setuptools 官方文档中所解释的那样,脚本只能是 python 函数,而不能是 shell 脚本。

为了完整起见,在我的例子中,shell 脚本读取git状态并设置环境变量,这些变量将从我的 python 项目中读取。shell 脚本和我的 python 项目结合得如此紧密,以至于我宁愿不将它们分成两个项目。

我也尝试过使用python函数来执行shell脚本,例如

[project.scripts]
my_script = 'my_project:my_func'
Run Code Online (Sandbox Code Playgroud)
def my_func():
    subprocess.run(...)
Run Code Online (Sandbox Code Playgroud)

这个解决方案的问题是,每次运行my_script,my_project都会加载,并且加载过程非常慢。

setuptools setup.py python-packaging pyproject.toml

11
推荐指数
2
解决办法
2445
查看次数