为什么setup.py通常没有shebang线?

时间:2016-02-29 13:43:23

标签: python setup.py

随机选择众所周知的Python软件包,为什么总体趋势是不在#!/usr/bin/env python的顶部包含setup.py行?我知道通常推荐的与文件交互的方式是:

python setup.py install

而不是

./setup.py install

但是有充分的理由吗?

这些套餐不包含shebang:pytestlxmlsixvirtualenvpip

但这些可以:requestssimplejsonsetuptools

4 个答案:

答案 0 :(得分:7)

setup.py将为您运行它的Python解释器及其库路径进行安装。一个shebang将定义该解释器,开发人员不希望这样。

即使你有一个带有shebang的setup.py,你仍然应该使用解释器运行该文件。它会阻止你出现诸如“黑客破坏包裹的地方!”这样的问题。

答案 1 :(得分:2)

在这种情况下,shebang几乎没有什么好处,也是一个很大的缺点:

  • 由于与此无关的原因,shebang非常有用:

    • 重复使用脚本(减少输入)
    • 它阐明了在查看源代码时脚本将执行的操作。
  • shebang必然会确定用于运行它的解释器。我已经编写了setup.py个脚本,我已将其作为python setup.py installpython3 setup.py install进行了测试;在这些情况下,我根本不知道该放什么东西。

答案 2 :(得分:1)

因为python包也必须在Windows平台上运行。 python setup.py install是通用命令

答案 3 :(得分:0)

根据我的经验,各种发行版中的sh几乎总是位于/bin,或者至少位于符号链接到/bin的文件夹中。他们几乎总是遵循相同的标准。因此,使用#!/bin/sh几乎适用于所有情况,当然除了在Windows机器上。这是完全不同的东西。

另一方面,Python在这个部门有点混乱。首先,并非所有发行版都存储python二进制文件或符号链接到/bin/python,例如Ubuntu在/usr/bin/python中仍然只有python的二进制文件。另一方面,即使对于python /bin,在某些操作系统上,如Fedora和OS X,/bin/python表示Python2,而在其他操作系统上,如Arch linux,{{ 1}}表示Python3。考虑到Python2和Python3代码并不完全兼容,如果使用/bin/python并使用

运行脚本
#!/bin/python
如果./setup.py 在您的计算机上用作解释器,则可能会导致问题,但脚本作者确实python3