如何指定setuptools创建的命令脚本的shebang行

4 投票
3 回答
4862 浏览
提问于 2025-04-16 20:57

我创建了一个软件包,打算在公司内部分发,它的作用是替代一个旧的bash脚本,名字是一样的。这个脚本在很多地方被引用,所以它的运行方式必须和现在的脚本一样。到目前为止,这样做都很顺利,直到我遇到一些服务器,它们的默认Python版本比较旧(比如CentOS)。

请问有没有办法在setup.py文件中指定脚本文件顶部的shebang行?也就是说,我需要的是#!/opt/bin/python,而不是#!/usr/bin/env python

3 个回答

0

首先要明白为什么需要shebang -
使用shebang可以让系统知道用哪个命令来运行脚本。

这是什么意思呢?
这意味着当你在终端中这样执行你的脚本时 -

$ ./script.py

这里的"script.py"是你在命令行中提到的命令的一个参数。

所以,如果shebang指向python解释器,那么上面的命令就相当于这样 -

$ python script.py

现在你可以理解shebang的目的了 - 它只是给出了脚本解释器的路径。(在你的情况下,就是python解释器)。

注意,如果你这样执行你的脚本,shebang就没有意义了 -

$ python script.py

(这是因为你直接调用了python可执行文件,并把script.py作为第一个参数传递给它,而它会简单地忽略第一行,因为那对它来说只是注释。)

那么,回到你的问题 - 如果你有两个python安装,并且想用非默认的python安装来执行你的脚本,你可以选择 -
1. 直接执行 $ /opt/bin/python script.py,忽略shebang。
或者
2. 修改 script.py 的shebang,然后你可以用 ./script.py 来执行。

如果我只需要运行一次 script.py,我会选择第一个选项;如果我需要多次执行它,我会选择第二个选项(这样就不用每次都写 /opt/bin/python 了)。

1
  • /opt/bin/python script.py 来运行这个脚本,或者
  • 把第一行改成 #!/opt/bin/python,或者
  • 在你的路径中把 /opt/bin 放在 /usr/bin 前面。
1

我的问题得到了Keith的回答。运行这个命令 /opt/bin/python setup.py install 可以得到我想要的结果,而且不需要任何用户干预。

撰写回答