#!/ usr/bin/python3的目的

Kay*_*leL 136 python scripting

我已经注意到了几种脚本语言,但在这个例子中,我使用的是python.在许多教程中,他们将从#!/usr/bin/python3第一行开始.我不明白为什么我们有这个.

  • 不应该是操作系统知道它是一个python脚本(显然它已经安装,因为你正在引用它)
  • 如果用户使用的是非基于unix的操作系统,该怎么办?
  • 无论出于何种原因,该语言都安装在不同的文件夹中
  • 用户具有不同的版本.特别是当它不是完整版本号时(如Python3 vs Python32)

如果有的话,我可以看到这打破了python脚本,因为上面列出的原因.

Jin*_*Jin 221

#!/usr/bin/python3是一个shebang线.

shebang行定义了解释器所在的位置.在这种情况下,python3口译员位于/usr/bin/python3.甲shebang行也可以是bash,ruby,perl或任何其他脚本语言解释,例如:#!/bin/bash.

没有shebang行,操作系统不知道它是一个python脚本,即使你在脚本上设置执行标志并运行它./script.py.要使脚本在python3中默认运行,python3 script.py请将其作为调用或设置shebang行.

#!/usr/bin/env python3如果他们在不同位置安装了语言解释器,您可以使用不同系统的可移植性.

  • 所以‘#! 应选择 /usr/bin/env python3` 而不是 `#! /usr/bin/python3`? (19认同)
  • @Papaya-Automaton `chmod +x`。 (5认同)
  • @winklerrr 是的,它的使用更广泛。 (4认同)
  • 设置“执行标志”是什么意思? (2认同)

Mar*_*som 19

这被称为哈希爆炸.如果从shell运行脚本,它将检查第一行以确定应该启动什么程序来解释脚本.

非基于Unix的操作系统将使用自己的规则来确定如何运行脚本.例如,Windows将使用文件扩展名,这#将导致第一行被视为注释.

如果Python可执行文件的路径错误,那么脚本自然会失败.从标准约定指定的任何位置创建实际可执行文件的链接很容易.


zxq*_*xq9 10

此行有助于查找将运行脚本的程序可执行文件.这种shebang符号在大多数脚本语言中都是相当标准的(至少在成人操作系统上使用).

该行的一个重要方面是指定将使用哪个解释器.例如,在许多以开发为中心的Linux发行版中,同时安装多个版本的python是正常的.

Python 2.x和Python 3不是100%兼容的,因此这种差异非常重要.所以,#! /usr/bin/python#! /usr/bin/python3是不一样的(也不是完全一样#! /usr/bin/env python3,因为这页上其他地方所指出.


boa*_*dtc 6

3.7 Python doc 中阐明 shebang 行如何在 Windows 上工作:

  • 如果脚本文件的第一行以 #! 开头,则称为“shebang”行。Linux 和其他类似 Unix 的操作系统对此类行具有本机支持,并且它们通常用于此类系统以指示应如何执行脚本。
  • 适用于 Windows 的 Python Launcher 允许在 Windows 上将相同的工具与 Python 脚本一起使用
  • 为了允许 Python 脚本中的 shebang 行在 Unix 和 Windows 之间移植,启动器支持许多“虚拟”命令来指定要使用的解释器。支持的虚拟命令有:
    • /usr/bin/env python
      • shebang 行的 /usr/bin/env 形式还有一个特殊的属性。在查找已安装的 Python 解释器之前,此表单将在可执行文件 PATH 中搜索 Python 可执行文件。这对应于执行 PATH 搜索的 Unix env 程序的行为。
    • /usr/bin/python
    • /usr/local/bin/python
    • Python


Ign*_*ams 5

  1. 这条线就是这样的.

  2. 它被忽略了.

  3. 它将无法运行,应该更改为指向正确的位置.或者env应该使用.

  4. 它将无法运行,并且可能无法在不同的版本下运行.