"#!/usr/bin/env python" vs. "#!/usr/bin/python"?

G

Gilles

Hello

I've seen both shebang lines to run a Python script on a *nix host:

#!/usr/bin/env python
#!/usr/bin/python

What's the difference?

Thank you.
 
J

Jussi Piitulainen

Gilles said:
#!/usr/bin/env python
#!/usr/bin/python

What's the difference?

Not much if your python is /usr/bin/python: env looks for python and
finds the same executable.

When python is not /usr/bin/python but something else that is still
found by your system, /usr/bin/env still finds it.

For example, in a server where I work, python3 is installed as
something like /opt/python/3.2.2-gcc/bin/python3. There is no
/usr/bin/python3 at all, but "#! /usr/bin/env python3" works.
 
R

Roy Smith

Gilles said:
Hello

I've seen both shebang lines to run a Python script on a *nix host:

#!/usr/bin/env python
#!/usr/bin/python

What's the difference?

The first one looks through your PATH to find the right python
interpreter to run. The second one is hard-wired to run /usr/bin/python.

If you only have a single copy of python installed, it doesn't really
matter which you use. But, you might as well get into the habit of
using the /usr/bin/env flavor because it's more flexible.

I'm working on a number of different python projects. For each one, I
set up a new virtual environment using virtualenv. This lets me run
different versions of python in different projects, with different
collections of installed packages (and possibly different versions). I
can only do this because I use the /usr/bin/env line in all my scripts.
 
G

Gilles

The first one looks through your PATH to find the right python
interpreter to run. The second one is hard-wired to run /usr/bin/python.

If you only have a single copy of python installed, it doesn't really
matter which you use. But, you might as well get into the habit of
using the /usr/bin/env flavor because it's more flexible.

Thanks guys. I suspected that's what the difference was.
 
D

D'Arcy Cain

The first one looks through your PATH to find the right python
interpreter to run. The second one is hard-wired to run /usr/bin/python.

If you only have a single copy of python installed, it doesn't really
matter which you use. But, you might as well get into the habit of
using the /usr/bin/env flavor because it's more flexible.

Not just flexible but portable. On various systems I have Python
in /usr/bin, /usr/local/bin and /usr/pkg/bin. "#!/usr/bin/env python"
finds it in each case so I only need one version of the script.
 
G

Gilles

Not just flexible but portable. On various systems I have Python
in /usr/bin, /usr/local/bin and /usr/pkg/bin. "#!/usr/bin/env python"
finds it in each case so I only need one version of the script.

Good to know.
 
D

Demian Brecht

Not just flexible but portable. On various systems I have Python
in /usr/bin, /usr/local/bin and /usr/pkg/bin. "#!/usr/bin/env python"
finds it in each case so I only need one version of the script.

+1. This also resolves correctly on Cygwin, even if Python is installed
via Windows installers (as long as it's on system PATH). Tremendously
useful if you're bouncing between *nix and Windows regularly.
 
M

Matej Cepl

But, you might as well get into the habit of
using the /usr/bin/env flavor because it's more flexible.

In the same manner as one's freedom-fighter is another's fundamentalist
terrorist, what's flexible could be also dangerous. E.g.,

#!/usr/bin/env python

is forbidden in the core Fedora packages
(https://fedoraproject.org/wiki/Features/SystemPythonExecutablesUseSystemPython),
because nobody is willing to risk that by some random python binary in
/usr/local/bin some core infrastructure of Fedora installations (e.g.,
yum) could be broken.

Matìj
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top