• Uncategorized

About python : Shebang-executable-not-found-because-of-UTF-8-BOM-Byte-Order-Mark

Question Detail

For some reason the shebang in one of my scripts does not work:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Hello World"

When I execute this file, I get an error

 % ./test.py
./test.py: 1: #!/usr/bin/env: not found

There is no problem with the content of my /usr/bin/ directory: both env and python are there, with correct execution rights.

Question Answer

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.

You may also like...

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.