Python 文件头部声明:Shebang 和编码

难度: 1

时长: 10 min

本文档整合了关于Python文件头部声明的相关信息,包括shebang和编码声明。

概述

Python脚本文件的头部通常包含两种重要的声明:

  • Shebang:指定脚本解释器路径(主要用于Unix/Linux系统)

  • 编码声明:指定源代码文件的字符编码

Shebang(解释器声明)

什么是 Shebang?

Shebang(#!)是Unix和类Unix系统中脚本文件的首行,用来指定脚本应该由哪个解释器来执行。

语法示例

#!/usr/bin/env python3

或者:

#!/usr/bin/python

使用场景

  • Unix/Linux系统:在命令行中直接执行脚本时需要

  • Windows系统:shebang行没有实际作用

  • 跨平台脚本:建议使用 /usr/bin/env python3,因为它会查找环境变量中的Python解释器

编码声明

为什么需要编码声明?

编码声明确保Python源代码文件在不同的操作系统和环境中以统一的编码方式读取。

语法示例

# coding=utf-8

或者:

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

现代Python中的编码

从Python 3.0开始:

  • Python源代码文件默认使用UTF-8编码

  • 大多数情况下不需要显式指定编码

  • 但在以下情况下仍然建议使用:

    • 代码包含非ASCII字符(如中文)

    • 需要确保跨平台兼容性

    • 处理特定编码的文件

PEP 263 规范

根据PEP 263,编码声明必须出现在文件的第一行或第二行,并匹配以下正则表达式:

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

Shebang 和编码声明的顺序

当同时使用shebang和编码声明时,正确的顺序是:

  1. 第一行:Shebang(解释器声明)

  2. 第二行:编码声明

完整示例

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

# 你的Python代码从这里开始
print("Hello, World!")

最佳实践

现代Python开发

  1. 对于新项目

    • 如果只在Windows上运行,可以省略shebang

    • 如果包含非ASCII字符,建议添加编码声明

    • 大多数情况下,依赖Python 3的默认UTF-8编码即可

  2. 文件读写时的编码

    # 读取文件时指定编码
    with open('file.txt', 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 写入文件时指定编码
    with open('file.txt', 'w', encoding='utf-8') as f:
        f.write(content)
    
  3. 跨平台脚本

    • 使用 #!/usr/bin/env python3 作为shebang

    • 如果包含中文等非ASCII字符,添加编码声明

总结

  • Shebang:主要用于Unix/Linux系统,指定解释器路径

  • 编码声明:确保源代码文件编码一致性,现代Python中通常可选

  • 顺序:shebang在前,编码声明在后

  • 现代实践:依赖Python 3的默认UTF-8编码,仅在必要时显式声明


本文档整合自:source-file-encoding.md, shebang-and-encodings.md, python-shebang.md