Python脚本开头的#!/usr/bin/python

背景:经常在python脚本文件看到第一行是 #!/usr/bin/python#!/usr/bin/env python

1. #! 是什么

  #!叫做 Shebang 或Sha-bang,也可叫做“释伴”——“解释伴随行”的简称,通常出现在类Unix系统的脚本中第一行作为前两个字符。
  在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器,如上述/usr/bin/python/usr/bin/env python

2. #! 的意义

  思考一下,为什么有的python脚本文件没有上述第一行来指定解释器路径也没有影响?这种python脚本文件,

  1. 可以通过IDE如Pycharm、Spyder等直接运行。
  2. 也可以通过命令行,输入python xx.py执行,xx.py可以正常运行,如下图所示,

在这里插入图片描述
  其实对1和2两种方式,我们已经事先指定好了解释器路径。
  1是在IDE设置中已经设定了默认的或自定义的解释器路径;2是在安装python时配置了的环境变量,执行python命令时在环境变量中依次查找名为python的可执行文件,因此不需要再输入完整的解释器路径,如下图所示,

在这里插入图片描述

  特别的,1是基于如Windows操作系统这类可以安装这些IDE进行图形化界面操作而言的,但项目一般最终运行在服务器上,而服务器大都是类Unix操作系统。释伴正是针对类Unix操作系统,在脚本文件中指定运行此脚本文件的解释器路径。

3. #! 的使用

3.1 #!/usr/bin/python

  python脚本文件第一行加上#!/usr/bin/python后 ,当这个文件有可执行权限时,可直接执行,执行此python脚本文件的正是/usr/bin路径下的python解释器,如下所示:

在这里插入图片描述

3.2 #!/usr/bin/env python

  首先观察下图,执行env python后,进入了 Python console 模式,这似乎与上述直接执行 python 没什么区别。

在这里插入图片描述
  本质上确实是一样的!因为env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令
  当env python时,它其实会去 env | grep PATH 里(假如PATH是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin,python解释器在 /usr/bin/python。)这几个路径里去依次查找名为python的文件(这里的文件包括但不限于python解释器,如带有释伴的文件名为“python”的python脚本),如下例:
  在 /usr/local/sbin 下创建一个名称也为 python 的脚本文件时,观察下图,

在这里插入图片描述

运行说明:在/usr/local/sbin路径下创建的python文件的内容为上述3.1提到的demo.py的内容!当输入env python后,输出python文件的运行结果:Hello

  以上为 在命令行中 通过env命令,在系统的PATH目录中查找并执行python文件的过程。如若想要 在python脚本中 实现(调用环境变量的python解释器来执行此脚本),可在脚本文件第一行写上 #!/usr/bin/env python

4. 孰优孰劣

  因为不是所有的机器的 python 解释器路径都是 /usr/bin/python,显然#!/usr/bin/env python#!/usr/bin/python需指定固定路径的python解释器更灵活


参考:#!/usr/bin/env python 有什么用?

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值