python脚本指定解释器
2019-04-09 本文已影响0人
ThinkingCoding
在 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) 执行脚本,有两种形式:
- 以命令行形式指定解释器: python3 ./script.py;
- 通过 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 解释器