2016-02-29 20 views
4

查看随机选择的着名Python软件包,为什么总体趋势是在setup.py的顶部不包含#!/usr/bin/env python行?我知道,与文件交互的通常推荐的方法是这样的:为什么setup.py通常没有shebang行?

python setup.py install 

而不是

./setup.py install 

但有一个很好的理由?

这些包不包括家当:pytestlxmlsixvirtualenvpip

但这些事:requestssimplejsonsetuptools

+0

'#!'行不会伤害,因为它是一个注释。人们可能很懒惰。 – 2016-02-29 13:44:41

+0

就我个人而言,我经常忘记它(不仅仅是'setup.py',而且也是其他脚本) –

回答

6

setup.py打算替你安装Python解释你正在运行它,它是库路径。一个shebang会定义这个解释器,这是开发人员不希望的。

即使你有一个带有shebang的setup.py,你仍然应该在解释器之前运行该文件。它可以避免你遇到类似“黑客攻击已经发生!”的问题吗?

1

因为python包也必须在Windows平台上工作。 python setup.py install是普遍的命令

+2

shebang在任何平台上都不会受到伤害。必须在Windows上运行的论点是有效的,但它没有任何区别。 –

+0

shebang不会避免setup.py在windows中工作,所以我不明白这是如何回答这个问题的。 – Goyo

+1

阅读完本文后,我查看了[docs](https://docs.python.org/3/using/windows.html#shebang-lines),发现实际上'/ usr/bin/env'是便携式的到Windows。 – erip

2

在这种设置下,家当提供一些好处,以及一个很大的缺点:

  • 的家当是有用的,这里不相关的原因:

    • 它简化重复使用脚本(少打字)
    • 它阐明了脚本在查看源代码时的操作方式。
  • shebang必然决定用来运行它的解释器。我已经写了setup.py脚本,我已经测试为python setup.py installpython3 setup.py install;在这些情况下,我根本不知道该在什么地方放。

0

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

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

./setup.py 

如果python3作为您的机器上解释,但真正python2由脚本作者的意思可能会导致问题。

+0

你不应该指望在Ubuntu上找到'/ bin/python'。 –

+0

@KlausD。相应地更改,谢谢。 – Chong