For some reason the shebang in one of my scripts does not work:
# -*- coding: utf-8 -*-
print "Hello World"
When I execute this file, I get an error
./test.py: 1: #!/usr/bin/env: not found
There is no problem with the content of my
/usr/bin/ directory: both
python are there, with correct execution rights.
This is due to how Unix and Linux handle the shebang.
#! must be the first two bytes in the file. If you have a BOM then this isn’t true anymore hence the error.
Note that putting a BOM is completely useless from the point of view of the python interpreter, since the
# -*- coding: utf-8 -*- already tells python the encoding.
AFAIK BOM is usually not used with utf-8. It is used for UTF-16 et similia in order to specify the byte-order. If the editor assumes the wrong encoding you should be able to explicitly open the file with the correct encoding.
The cause of the problem is that my file was encoded using UTF8 with BOM (Byte Order Mark).
Removing the BOM, i.e. encoding the file using UTF8 without BOM solves the issue.
NB: for Notepad++ users, “UTF8 without BOM” is also called (weirdly) “ANSI as UTF-8” in the editor.