代码之家  ›  专栏  ›  技术社区  ›  Dogemore

#!/垃圾箱/垃圾箱vs#/可执行文件中的usr/local/bin/python

  •  1
  • Dogemore  · 技术社区  · 5 年前

    pip 程序,她砰砰的一声

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

    在监狱里 Install Certificates.command

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

    这两种方法之间有什么区别吗?有什么理由选择一个而不是另一个?

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

    3 回复  |  直到 5 年前
        1
  •  3
  •   tripleee pah8J    5 年前

    除此之外,您有时会将这种变通方法视为可移植性问题。在POSIX系统上, /usr/bin/env 很好地涵盖了大多数场景;但是,如果您需要可移植到较旧的或其他特殊的系统,那么回到最低公分母,然后逐步恢复到可以可靠运行的位置,例如Python在各种系统上可能需要各种不明显的构造。(丹D.的回答是一个很好的例子。)

    sh 设置(获取在使用 语法)然后 hand over execution 巨蟒;

    #!/bin/sh
    # source some variables
    . /etc/defaults/myenv.sh
    # Then run Python
    exec env python -c '
    # ... Your Python script here
        ' "$@"
    
        2
  •  2
  •   Alex Harvey    5 年前

    此特定代码用于 Install Certificates.command 脚本是在Python中引入的 Issue #17128 . 据我所知,作者还没有解释他为什么这样写代码。

    注意 .command

    命令

    ~/Desktop/test.command :

    #!/usr/bin/env python
    print "Hello world"
    

    然后在Finder中查看桌面文件夹,注意它报告为“shell”文件:

    enter image description here

    (虽然它被错误地报告为Shell文件,但这个Python脚本仍然可以通过双击来执行。它不会破坏Finder或任何东西。)

    #!/usr/bin/env python 作为你的舍邦线。创建Bash Heredoc (即 python3.6 << EOF 模式)会产生各种各样的问题,比如语法高亮显示不起作用,必须注意herdoc中的Bash变量插值等等。

        3
  •  2
  •   Dan D.    5 年前

    线路上有线路长度限制 #!

    选项是指向程序的路径,但仅当它足够短时。使用 env python 它使用路径。或者像这样的链式装载。