Python脚本头部
通常情况下,头部应该是这样的:
#!/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
可执行文件时才有效。这种做法不推荐。