Python 2中的非ASCII字符shebang

3

正如PEP 263所述,Python 2(特别是我的情况下的2.7版本)需要一个魔法注释行来指定文件编码:

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

如果没有这个,就无法在文件中包含非ASCII字符。将会引发一个臭名昭著的错误:

SyntaxError: Non-ASCII character '[…]' in file […] on line […], but no encoding declared; see http://python.org/dev/peps/pep-0263/

然而,如果非 ASCII 字符出现在 shebang 解释器路径中,则魔术注释无法起作用:
#!/Users/naïve/project/python2.7
# -*- coding: utf-8 -*-
print 'Hello.'

例如,如果在具有非ASCII路径的文件夹中创建虚拟环境,则会发生以下情况:创建许多带有断开脚本的shebang的脚本。
我想到的唯一解决方法是将该文件夹建立符号链接到某个仅含ASCII字符的路径中。然后就可以将shebang路径更改为ASCII路径。或者在使用virtualenv时,从已建立符号链接的路径进行初始化。
但是,如果非ASCII路径部分是用户的主路径,并且用户没有管理权限,则无法执行此操作。因此,我想问:是否有任何其他解决方法,更加简洁?例如,某些默认的文件编码设置或环境变量,如果Python找不到魔术注释,它将使用它们?
1个回答

0

如果您将文件保存为utf-8-sig而不是utf-8,则根本不需要编码cookie。也就是说,在保存文件时使用unicode字节顺序标记

在Python中,您可以使用utf-8-sig作为编码参数。在VIM中,您可以使用:set bomb来显式地使用BOM保存文件。


有趣。当我使用BOM保存文件时,系统(macOS)完全忽略了shebang。它将其作为bash脚本运行,而不是指定的Python脚本。 - Glutexo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接