Python – Why do people write #!/usr/bin/env python on the first line of a Python script

pythonshebangshell

I see this at the top of Python files:

  1. For Python 2 files
    #!/usr/bin/env python
    
  2. For Python 3 files
    #!/usr/bin/env python3
    

It seems to me like the files run the same without that line.

Best Answer

If you have several versions of Python installed, /usr/bin/env will ensure the interpreter used is the first one on your environment's $PATH. The alternative would be to hardcode something like #!/usr/bin/python; that's ok, but less flexible.

In Unix, an executable file that's meant to be interpreted can indicate what interpreter to use by having a #! at the start of the first line, followed by the interpreter (and any flags it may need).

If you're talking about other platforms, of course, this rule does not apply (but that "shebang line" does no harm, and will help if you ever copy that script to a platform with a Unix base, such as Linux, Mac, etc).