查看原文
其他

!/usr/bin/python与#!/usr/bin/env python的区别

写代码的明哥 Python编程时光 2021-08-09

点击上方“Python编程时光”,选择“加为星标

第一时间关注Python技术干货!



我们经常会在别人的脚本或者项目的入口文件里看到第一行是下面这样

#!/usr/bin/python

或者这样

#!/usr/bin/env python

这两者有什么区别呢?

稍微接触过 linux 的人都知道 /usr/bin/python 就是我们执行 python 进入console 模式里的 python

而当你在可执行文件头里使用 #! + /usr/bin/python ,意思就是说你得用哪个软件 (python)来执行这个文件。

那么加和不加有什么区别呢?

不加的话,你每次执行这个脚本时,都得这样:python xx.py

有没有一种方式?可以省去每次都加 python 呢?

当然有,你可以文件头里加上#!/usr/bin/python ,那么当这个文件有可执行权限 时,只直接写这个脚本文件,就像下面这样。

明白了这个后,再来看看 !/usr/bin/env python 这个 又是什么意思 ?

当我执行 env python 时,自动进入了 python console 的模式。

这是为什么?和 直接执行 python 好像没什么区别呀

当你执行 env python 时,它其实会去 env | grep PATH 里(也就是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin )这几个路径里去依次查找名为python的可执行文件。

找到一个就直接执行,上面我们的 python 路径是在 /usr/bin/python  里,在 PATH 列表里倒数第二个目录下,所以当我在  /usr/local/sbin 下创建一个名字也为 python 的可执行文件时,就不会执行 /usr/bin/python 了。

具体演示过程,你可以看下面。

那么对于这两者,我们应该使用哪个呢?

个人觉得应该优先使用 #!/usr/bin/env python,因为不是所有的机器的 python 解释器都是 /usr/bin/python


推荐阅读



涨姿势了,raise...from... 是个什么操作?

让人想骂街的 Python 炫技操作:条件语句的七种写法

如何用 GitHub Actions 写出高质量的 Python代码?

盘点 Python 高手都写不出来的几个错误

想写好面向对象的代码,这几篇一定要看(上)

想写好面向对象的代码,这几篇一定要看(中)

想写好面向对象的代码,这几篇一定要看(下)




长按下图  ➡   关注博主

(按左边关注 Python, 按右边关注 Goalng


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存