为什么 setup.py 通常没有 shebang 行?
Why does setup.py usually not have a shebang line?
查看随机选择的知名 Python 包,为什么总的趋势是 setup.py
顶部不包含 #!/usr/bin/env python
行?我知道通常推荐的与文件交互的方式是这样的:
python setup.py install
而不是
./setup.py install
但这有充分的理由吗?
这些包不包含 shebang:pytest, lxml, six, virtualenv, pip
但是这些是:requests, simplejson, setuptools
setup.py
将为您 运行 使用的 Python 解释器及其库路径进行安装。 shebang 将定义该解释器,而这不是开发人员所希望的。
即使您有一个带有 shebang 的 setup.py
,您仍然应该 运行 前面有解释器的文件。它可以防止您提出诸如“包裹去哪儿了!?”之类的问题。
因为 python 包也必须在 Windows 平台上工作。
python setup.py install
是通用命令
在这种情况下,shebang 几乎没有什么好处,但有一个很大的缺点:
shebang 有用的原因与此处无关:
- 它简化了重复使用脚本(减少输入)
- 它阐明了 how/what 查看源代码时脚本的作用。
shebang 必然决定用于 运行 它的解释器。我写了 setup.py
个脚本,我测试过 python setup.py install
和 python3 setup.py install
;在这些情况下,我根本不知道在 shebang 中放什么。
根据我的经验,sh
在各种发行版中几乎总是位于 /bin
中,或者至少位于符号链接到 /bin
的文件夹中。他们几乎总是遵循相同的标准。所以使用 #!/bin/sh
在几乎所有情况下都有效,当然 Windows 机器除外。那是完全不同的东西。
Python,另一方面,这个部门有点乱。首先,并非所有发行版都将 python 二进制存储或符号链接到 /bin/python
,例如 Ubuntu 在 /usr/bin/python
中仍然只有 python 的二进制。另一方面,即使对于 /bin
中有 python
的那些,在某些 OS 上,如 Fedora 和 OS X,/bin/python
意味着 Python2,而在其他方面,如 Arch linux,/bin/python
表示 Python3。考虑到 Python2 和 Python3 代码不完全兼容,如果使用 #!/bin/python
和 运行 脚本与
./setup.py
如果 python3
在您的机器上用作解释器,可能会导致问题,但实际上 python2
是脚本作者的意思。
查看随机选择的知名 Python 包,为什么总的趋势是 setup.py
顶部不包含 #!/usr/bin/env python
行?我知道通常推荐的与文件交互的方式是这样的:
python setup.py install
而不是
./setup.py install
但这有充分的理由吗?
这些包不包含 shebang:pytest, lxml, six, virtualenv, pip
但是这些是:requests, simplejson, setuptools
setup.py
将为您 运行 使用的 Python 解释器及其库路径进行安装。 shebang 将定义该解释器,而这不是开发人员所希望的。
即使您有一个带有 shebang 的 setup.py
,您仍然应该 运行 前面有解释器的文件。它可以防止您提出诸如“包裹去哪儿了!?”之类的问题。
因为 python 包也必须在 Windows 平台上工作。
python setup.py install
是通用命令
在这种情况下,shebang 几乎没有什么好处,但有一个很大的缺点:
shebang 有用的原因与此处无关:
- 它简化了重复使用脚本(减少输入)
- 它阐明了 how/what 查看源代码时脚本的作用。
shebang 必然决定用于 运行 它的解释器。我写了
setup.py
个脚本,我测试过python setup.py install
和python3 setup.py install
;在这些情况下,我根本不知道在 shebang 中放什么。
根据我的经验,sh
在各种发行版中几乎总是位于 /bin
中,或者至少位于符号链接到 /bin
的文件夹中。他们几乎总是遵循相同的标准。所以使用 #!/bin/sh
在几乎所有情况下都有效,当然 Windows 机器除外。那是完全不同的东西。
Python,另一方面,这个部门有点乱。首先,并非所有发行版都将 python 二进制存储或符号链接到 /bin/python
,例如 Ubuntu 在 /usr/bin/python
中仍然只有 python 的二进制。另一方面,即使对于 /bin
中有 python
的那些,在某些 OS 上,如 Fedora 和 OS X,/bin/python
意味着 Python2,而在其他方面,如 Arch linux,/bin/python
表示 Python3。考虑到 Python2 和 Python3 代码不完全兼容,如果使用 #!/bin/python
和 运行 脚本与
./setup.py
如果 python3
在您的机器上用作解释器,可能会导致问题,但实际上 python2
是脚本作者的意思。