正如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找不到魔术注释,它将使用它们?
bash
脚本运行,而不是指定的Python脚本。 - Glutexo