what could cause a script to fail to find python when it has `#!/usr/bin/env python` in the first line?
If you see the error “: No such file or directory” (with nothing before the colon), it means that your shebang line has a carriage return at the end, presumably because it was edited under Windows (which uses CR,LF as a line separator). The CR character causes the cursor to move back to the beginning of the line after the shell prints the beginning of the message and so you only get to see the part after CR which ends the interpreter string that's part of the error message.
Remove the CR: the shebang line needs to have a Unix line ending (linefeed only). Python itself allows CRLF line endings, so the CR characters on other lines don't hurt. Shell scripts on the other hand must be free of CR characters.
To remove the Windows line endings, you can use dos2unix:
sudo dos2unix /usr/local/bin/casperjs
or sed:
sudo sed -i -e 's/\r$//' /usr/local/bin/casperjs
If you must edit scripts under Windows, use an editor that copes with Unix line endings (i.e. something less brain-dead than Notepad) and make sure that it's configured to write Unix line endings (i.e. LF only) when editing a Unix file.
I am using Visual Studio Code and am new to the text editor. I was receiving the same error and tried manually following steps in this post, it did not work for me. However, in Visual Studio Code bottom right corner provides an option to switch between CR and LF on the fly, problem solved. I am not sure if this applies but if you are programming in a text editor it may provide a simple answer by providing a button to switch.