在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
' "$@"
关于python - #!/bin/sh vs #!/usr/local/bin/python 在可执行文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54499544/