随机选择众所周知的Python软件包,为什么总体趋势是不在#!/usr/bin/env python
的顶部包含setup.py
行?我知道通常推荐的与文件交互的方式是:
python setup.py install
而不是
./setup.py install
但是有充分的理由吗?
这些套餐不包含shebang:pytest,lxml,six,virtualenv,pip
但这些可以:requests,simplejson,setuptools
答案 0 :(得分:7)
setup.py
将为您运行它的Python解释器及其库路径进行安装。一个shebang将定义该解释器,开发人员不希望这样。
即使你有一个带有shebang的setup.py
,你仍然应该使用解释器运行该文件。它会阻止你出现诸如“黑客破坏包裹的地方!”这样的问题。
答案 1 :(得分:2)
在这种情况下,shebang几乎没有什么好处,也是一个很大的缺点:
由于与此无关的原因,shebang非常有用:
shebang必然会确定用于运行它的解释器。我已经编写了setup.py
个脚本,我已将其作为python setup.py install
和python3 setup.py install
进行了测试;在这些情况下,我根本不知道该放什么东西。
答案 2 :(得分:1)
因为python包也必须在Windows平台上运行。
python setup.py install
是通用命令
答案 3 :(得分:0)
根据我的经验,各种发行版中的sh
几乎总是位于/bin
,或者至少位于符号链接到/bin
的文件夹中。他们几乎总是遵循相同的标准。因此,使用#!/bin/sh
几乎适用于所有情况,当然除了在Windows机器上。这是完全不同的东西。
/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
。