Skip to main content
 首页 » 编程设计

python之#!/bin/sh vs #!/usr/local/bin/python 在可执行文件中

2025年05月04日12exmyth

在pip程序中,She-bang是

#!/usr/local/bin/python 
 
if __name__ == "__main__": 
    # Python program body 

在 Python 启动器提供的 Install Certificates.command 中:

#!/bin/sh 
 
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 << "EOF" 
 
# python program body 
 
EOF 

这两种方法之间有什么区别吗?有什么理由比另一个更喜欢一个吗?

在我看来它们都是一样的,除了第二个多了一个 bash 子例程。这样对吗?

请您参考如下方法:

在一般情况下,您只需指定您实际需要的解释器。

除此之外,您有时会看到像这样的解决方法作为可移植性黑客。在 POSIX 系统上,/usr/bin/env 很好地涵盖了大多数场景;但是,如果您需要对旧系统或其他特殊系统的可移植性,请回退到最低公分母,然后再回到可以可靠运行的地方,例如各种系统上的 Python 可能需要各种不明显的结构。 (之前的 - upvoted! - Dan D. 的回答就是一个很好的例子。)

在某些情况下,您希望 sh 设置一些东西(例如,获取一些在使用 sh 语法的文件中指定的环境变量),然后hand over execution到 Python;

#!/bin/sh 
# source some variables 
. /etc/defaults/myenv.sh 
# Then run Python 
exec env python -c ' 
# ... Your Python script here 
    ' "$@"