我正在尝试将 shell 脚本与 Python 包一起分发。理想情况下,shell 脚本在我运行时安装pip install my_package。我从这篇文章中读到,我的预期行为正是scripts关键字 ofsetuptools.setup所提供的。例如,该脚本my_script将使用以下setup.py脚本进行安装:
setup(
...
scripts=['my_script'],
...
)
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用上述方法,原因有两个:
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都会加载,并且加载过程非常慢。