如何指定setuptools创建的命令脚本的shebang行
我创建了一个软件包,打算在公司内部分发,它的作用是替代一个旧的bash脚本,名字是一样的。这个脚本在很多地方被引用,所以它的运行方式必须和现在的脚本一样。到目前为止,这样做都很顺利,直到我遇到一些服务器,它们的默认Python版本比较旧(比如CentOS)。
请问有没有办法在setup.py文件中指定脚本文件顶部的shebang行?也就是说,我需要的是#!/opt/bin/python
,而不是#!/usr/bin/env python
。
3 个回答
首先要明白为什么需要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
了)。
- 用
/opt/bin/python script.py
来运行这个脚本,或者 - 把第一行改成
#!/opt/bin/python
,或者 - 在你的路径中把
/opt/bin
放在/usr/bin
前面。
我的问题得到了Keith的回答。运行这个命令 /opt/bin/python setup.py install
可以得到我想要的结果,而且不需要任何用户干预。