#!/usr/bin/python
# -*- coding: utf-8 -*-
与
#!/usr/bin/env python
# coding: utf-8
的区别
#!/usr/bin/python
和 #!/usr/bin/env python
的主要区别在于它们如何找到 Python 解释器⁴⁵⁶⁷。
#!/usr/bin/python
是硬编码的,总是运行/usr/bin/python
⁶。这确保了使用 Debian 安装的 python,并满足了对额外 python 模块的所有依赖性⁴。#!/usr/bin/env python
会运行你当前环境中默认的 python⁶。它会考虑例如$PATH
⁶。使用#!/usr/bin/env python
可以确保你的程序在你调用它们的地方(例如一个 python 虚拟环境)表现得和你期望的一样⁴。
至于 # -*- coding: utf-8 -*-
和 # coding: utf-8
,Python 对这两种方式都能识别,没有区别¹²。Python 在文件的前两行寻找匹配正则表达式 "coding[:=]\s*([-\\w.]+)"
的注释,这个注释被处理为编码声明¹²。这个声明必须出现在它自己的一行。如果它是第二行,那么第一行也必须只是注释¹²。
在Python的编码声明中,-*-
是一种特殊的标记,用于帮助某些文本编辑器(如GNU Emacs⁴)识别文件的编码⁴⁶。例如,在 # -*- coding: utf-8 -*-
中,-*-
告诉编辑器这是一个特殊的Emacs注释,编辑器应该解析这个注释来找到文件的编码⁴⁶。这种格式也被其他一些工具识别,例如PyCharm⁸。
总的来说,-*-
是一种标记,用于在文件中声明编码,以便于文本编辑器正确地打开和显示文件⁴⁶⁸。
一般来说,推荐使用 #!/usr/bin/env python
¹²³⁴⁵。这是因为并非所有的机器上的 Python 解释器都在 /usr/bin/python
¹²³⁴⁵。使用 #!/usr/bin/env python
可以确保在你的环境设置中找到 Python 的路径¹²³⁴⁵。这样,无论 Python 解释器安装在何处(例如在虚拟环境中),#!/usr/bin/env python
都能正确地找到并使用它¹²³⁴⁵。