Python脚本头部

103 投票
6 回答
150575 浏览
提问于 2025-04-16 00:29

通常情况下,头部应该是这样的:

#!/usr/bin/env python

但是我发现下面这个在执行脚本时也能正常工作,比如用 $python ./my_script.py 这样的命令。

#!/usr/bin/python
#!python

这两个头部有什么区别呢?第二个头部可能有什么问题?另外,能不能讨论一下当Python解释器在PATH里或者不在PATH里的情况?谢谢。

6 个回答

5

Python的可执行文件可能安装在除了/usr/bin以外的其他地方,但env这个命令几乎总是在/usr/bin这个位置,所以使用/usr/bin/env会更方便,适应性更强。

39


我建议在你脚本的开头做三件事:

首先,正如之前提到的,使用环境变量:

#!/usr/bin/env python

第二,设置你的编码方式:

# -*- coding: utf-8 -*-

第三,添加一些文档字符串:

"""This is a awesome
    python script!"""

当然,我会使用" "(4个空格)来进行缩进。
最终的头部看起来会是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""This is a awesome
        python script!"""


祝你好运,编码愉快。

132

首先,每当你用解释器直接运行一个脚本,比如说

$ python ./my_script.py
$ ksh ~/bin/redouble.sh
$ lua5.1 /usr/local/bin/osbf3

那么 #! 这一行会被忽略。#! 这一行是Unix系统中可执行脚本的一个特性,你可以在execve(2)的手册页面上看到详细的说明。在那里你会发现,紧跟在 #! 后面的词必须是一个有效可执行文件的路径。所以

#!/usr/bin/env python

会执行用户的 $PATH 中的任何 python。这种方式对Python解释器的位置变化比较耐用,这让它在不同环境中更容易使用,但这也意味着用户可以通过在 $PATH 中放置其他内容来覆盖标准的Python解释器。根据你的需求,这种行为可能是可以接受的,也可能不可接受。

接下来,

#!/usr/bin/python

处理的是Python解释器通常安装在 /usr/bin 的情况。如果它安装在其他地方,你就没办法了。但这种方式可以确保你得到你想要的确切版本,或者什么都得不到(“失败停止”行为),就像在

#!/usr/bin/python2.5

最后,

#!python

只有在脚本运行时当前目录下有一个 python 可执行文件时才有效。这种做法不推荐。

撰写回答