I'm usually using the following shebang declaration in my Python scripts:
#!/usr/bin/python
Recently, I've came across this shebang declaration:
#!/usr/bin/env python
In the script documentation, it was noted that using this form is "more portable".
What does this declaration mean? How come there's a space in the middle of the path? Does it actually contribute to protability?
#!/usr/bin/env python
is more portable because in general the program /usr/bin/env
can be used to "activate" the desired command without full path.
Otherwise, you would have to specify the full path of the Python interpreter, which can vary.
So no matter if the Python interpreter was in /usr/bin/python
or in /usr/local/bin/python
or in your home directory, using #!/usr/bin/env python
will work.
Success story sharing
PATH
variable in the environment by looking at each directory in it for a binary of the given name (python, in this case). If it finds it, it executes the program. This decouples the finding of the program from the execution, and sinceenv
is available on many systems in the standard location of/usr/bin
, it is more portable. Better standardization leads to better portability.#!/usr/bin/env python3
instead.