Python模块是否需要shebang或编码指令?

Python模块是否需要shebang或编码指令?,python,Python,我们的应用程序由几个模块组成,分为两个包和一个脚本。 我不确定,也无法通过谷歌搜索了解模块是否需要一个编码指令来管理我们的母语法语重音字符串,在我们使用时,是否需要一个带解释器指令的沙邦,或者是否足以将这两行放在一个脚本中。脚本需要shebang。模块不需要shebang——它们有时用于使文本编辑器的工作更容易(在检测编程语言时更容易),或者如果模块可以作为脚本运行以执行其测试,则不需要其他调用 所有Python代码,无论是在模块中还是在脚本中,如果不使用目标Python版本的默认编码(ASCI

我们的应用程序由几个模块组成,分为两个包和一个脚本。
我不确定,也无法通过谷歌搜索了解模块是否需要一个编码指令来管理我们的母语法语重音字符串,在我们使用时,是否需要一个带解释器指令的沙邦,或者是否足以将这两行放在一个脚本中。

脚本需要shebang。模块不需要shebang——它们有时用于使文本编辑器的工作更容易(在检测编程语言时更容易),或者如果模块可以作为脚本运行以执行其测试,则不需要其他调用


所有Python代码,无论是在模块中还是在脚本中,如果不使用目标Python版本的默认编码(ASCII代表2.x,Unicode代表3.x),都应该具有编码指令。

脚本需要使用SHEBANG。模块不需要shebang——它们有时用于使文本编辑器的工作更容易(在检测编程语言时更容易),或者如果模块可以作为脚本运行以执行其测试,则不需要其他调用


所有Python代码,无论是在模块中还是在脚本中,在不使用目标Python版本的默认编码(ASCII代表2.x,Unicode代表3.x)时,都应该有编码指令。

脚本需要shebang,如果它们是可执行的。也就是说,如果您打算将它们作为
script
(或
script.py
)运行,则需要一个shebang,但如果您打算将它们作为
python script.py
运行,则不需要shebang

这是shebangs唯一的使用案例。编辑器也可以使用它们来确定模式,但它们还应该查看
.py
扩展名

Python 2的默认源代码编码是ASCII。要在Python 2源文件中放入任何非ASCII字符串文字,您应该在文件的第一行或第二行有一行,如下图所示:

# -*- coding: utf-8 -*-
当然,您可以替换不同的编码,但utf-8是常见的。有人向我指出,
-*-
可以省略,这是出于shell兼容性的原因,但是文档中包含了它们


Python 3的默认源代码编码是utf-8,所以请继续使用所有字符。

脚本需要shebang,如果它们是可执行的。也就是说,如果您打算将它们作为
script
(或
script.py
)运行,则需要一个shebang,但如果您打算将它们作为
python script.py
运行,则不需要shebang

这是shebangs唯一的使用案例。编辑器也可以使用它们来确定模式,但它们还应该查看
.py
扩展名

Python 2的默认源代码编码是ASCII。要在Python 2源文件中放入任何非ASCII字符串文字,您应该在文件的第一行或第二行有一行,如下图所示:

# -*- coding: utf-8 -*-
当然,您可以替换不同的编码,但utf-8是常见的。有人向我指出,
-*-
可以省略,这是出于shell兼容性的原因,但是文档中包含了它们


Python3的默认源代码编码是utf-8,因此请继续使用所有字符。

+1以获得比我的答案更好、更深入的编码行为描述。也就是说,我认为脚本应该是
yourscript
,而不是
yourscript.py
——更符合平台惯例;毕竟,您运行的是
ls
,而不是
ls.elf
。事实上,当使用setuptools为入口点自动构建脚本包装器时,它避免使用扩展,除非平台出于同样的原因需要其他扩展。好的一点是,我的python bin脚本也没有扩展+1来更好、更深入地描述编码行为,而不是我的答案所包含的内容。也就是说,我认为脚本应该是
yourscript
,而不是
yourscript.py
——更符合平台惯例;毕竟,您运行的是
ls
,而不是
ls.elf
。事实上,当使用setuptools为入口点自动构建脚本包装器时,它避免使用扩展,除非平台出于同样的原因需要其他扩展。好的一点是,我的python bin脚本也没有扩展