--- fid: 20241026-040600 url: https://peps.python.org/pep-0263/ tags: [shebang, encoding, pep-263, first line] --- # Python 文件头部声明:Shebang 和编码 **难度**: 1 **时长**: 10 min 本文档整合了关于Python文件头部声明的相关信息,包括shebang和编码声明。 ## 概述 Python脚本文件的头部通常包含两种重要的声明: - **Shebang**:指定脚本解释器路径(主要用于Unix/Linux系统) - **编码声明**:指定源代码文件的字符编码 ## Shebang(解释器声明) ### 什么是 Shebang? Shebang(`#!`)是Unix和类Unix系统中脚本文件的首行,用来指定脚本应该由哪个解释器来执行。 ### 语法示例 ```python #!/usr/bin/env python3 ``` 或者: ```python #!/usr/bin/python ``` ### 使用场景 - **Unix/Linux系统**:在命令行中直接执行脚本时需要 - **Windows系统**:shebang行没有实际作用 - **跨平台脚本**:建议使用 `/usr/bin/env python3`,因为它会查找环境变量中的Python解释器 ## 编码声明 ### 为什么需要编码声明? 编码声明确保Python源代码文件在不同的操作系统和环境中以统一的编码方式读取。 ### 语法示例 ```python # coding=utf-8 ``` 或者: ```python # -*- coding: utf-8 -*- ``` ### 现代Python中的编码 从Python 3.0开始: - Python源代码文件**默认使用UTF-8编码** - 大多数情况下**不需要显式指定编码** - 但在以下情况下仍然建议使用: - 代码包含非ASCII字符(如中文) - 需要确保跨平台兼容性 - 处理特定编码的文件 ### PEP 263 规范 根据[PEP 263](https://peps.python.org/pep-0263/),编码声明必须出现在文件的第一行或第二行,并匹配以下正则表达式: ``` ^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+) ``` ## Shebang 和编码声明的顺序 当同时使用shebang和编码声明时,正确的顺序是: 1. **第一行**:Shebang(解释器声明) 2. **第二行**:编码声明 ### 完整示例 ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 你的Python代码从这里开始 print("Hello, World!") ``` ## 最佳实践 ### 现代Python开发 1. **对于新项目**: - 如果只在Windows上运行,可以省略shebang - 如果包含非ASCII字符,建议添加编码声明 - 大多数情况下,依赖Python 3的默认UTF-8编码即可 2. **文件读写时的编码**: ```python # 读取文件时指定编码 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*