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

时间:2011-07-06 16:18:49

标签: python packaging setuptools

我创建了一个包,我将在整个公司分发,用相同的名称替换旧的bash脚本。它被引用很多地方所以它需要像当前脚本那样执行。这个工作正常,直到我遇到一些没有当前版本的Python作为默认Python(又名CentOS)的服务器。

有没有办法在setup.py中指定在脚本文件顶部创建什么shebang行?即我需要#!/opt/bin/python而不是#!/usr/bin/env python

3 个答案:

答案 0 :(得分:2)

  • 使用/opt/bin/python script.py
  • 运行脚本
  • 编辑第一行以阅读#!/opt/bin/python
  • /opt/bin之前将/usr/bin放在您的路径中。

答案 1 :(得分:1)

首先要了解为什么需要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 OR
2.更改script.py的shebang,然后您可以执行./script.py

如果我必须只运行script.py一次,我会选择第一个选项,如果我必须执行多次,我会选择第二个选项(所以我不会浪费时间每次都写/opt/bin/python

答案 2 :(得分:0)

Keith回答了我的问题的答案。将setup.py作为/opt/bin/python setup.py install运行会产生我需要的结果而无需任何用户干预。