python脚本指定解释器

在 Python 脚本的第一行经常见到这样的注释:#!/usr/bin/env python3或者#!/usr/bin/python3,其目的就是指定该python脚本需要用到的解释器是python。

语法

在脚本中, 第一行以 #! 开头的代码, 在计算机行业中叫做 "shebang", 其作用是"指定由哪个解释器来执行脚本".

语法格式:

#!/usr/bin/env python3 
或者 
#!/usr/bin/python3

那么,这两者有区别吗?

  • #!/usr/bin/python3
    用绝对路径的格式指定解释器,上面表示当前系统中 python3 解释器所处的绝对路径就是 /usr/bin/python3。

弊端:
如果当前系统 python 解释器不在该路径下的话, 脚本将无法执行了!
之所以有这种写法, 是因为在类 Unix 系统中, python 解释器通常位于这个路径。

  • #!/usr/bin/env/ python3
    从 "PATH 环境变量"中查找 python3 解释器的位置, 再调用该路径下的解释器来执行脚本。

因此,#!/usr/bin/env python3 的写法更灵活更具有通用性,推荐使用这种写法。

作用

在 "Unix -like 系统"中 (比如Linux, OS X等),如果是通过命令行 (shell) 执行脚本,有两种形式:

  1. 以命令行形式指定解释器: python3 ./script.py;
  2. 通过 shebang 来指定解释器。比如 python 脚本的第一行如果写上 #!/usr/bin/python3 或者是
    #!/usr/bin/env python3,就表示用 python3 解释器来执行, 然后用命令行直接调用文件。
    ./my_script.py, shell 会检查脚本的第一行代码, 发现有 shebang, 会按其指定的解释器来执行;

注意:"命令行指定"比 "shebang 指定"优先级更高,即如果通过shebang指定了解释器,但是执行时又通过命令行指定一个解释器,那么以命令行指定为准。

拓展

在linux系统中经常碰到用shebang指定shell脚本的解释器。

  • #!/bin/sh
    表示用 Bourne shell 来执行脚本,如果系统中没有 sh, 会选择兼容的 shell 解释器
  • #!/bin/bash
    表示用 Bash shell 来执行,如果系统中没有 bash, 会选择兼容的 shell 解释器

你可能感兴趣的:(python脚本指定解释器)