Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

67 views
Skip to first unread message

Gilles

unread,
Sep 28, 2012, 6:32:49 AM9/28/12
to
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.

Jussi Piitulainen

unread,
Sep 28, 2012, 6:49:07 AM9/28/12
to
Gilles writes:

> #!/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.

Roy Smith

unread,
Sep 28, 2012, 6:57:28 AM9/28/12
to
In article <34va6856ocuas7jpu...@4ax.com>,
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.

Gilles

unread,
Sep 28, 2012, 7:34:48 AM9/28/12
to
On Fri, 28 Sep 2012 06:57:28 -0400, Roy Smith <r...@panix.com> wrote:
>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'Arcy Cain

unread,
Sep 28, 2012, 9:19:54 AM9/28/12
to Roy Smith, pytho...@python.org
On Fri, 28 Sep 2012 06:57:28 -0400
Roy Smith <r...@panix.com> wrote:
> > 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.

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.

--
D'Arcy J.M. Cain <da...@druid.net> | Democracy is three wolves
http://www.druid.net/darcy/ | and a sheep voting on
+1 416 425 1212 (DoD#0082) (eNTP) | what's for dinner.
IM: da...@Vex.Net

Gilles

unread,
Sep 28, 2012, 9:22:16 AM9/28/12
to
On Fri, 28 Sep 2012 09:19:54 -0400, D'Arcy Cain <da...@druid.net>
wrote:
>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.

Demian Brecht

unread,
Sep 28, 2012, 9:58:43 AM9/28/12
to pytho...@python.org
On 12-09-28 06:19 AM, D'Arcy Cain wrote:
> 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.

--
Demian Brecht
@demianbrecht
http://demianbrecht.github.com

Matej Cepl

unread,
Sep 30, 2012, 5:46:27 PM9/30/12
to
On 28/09/12 12:57, Roy Smith wrote:
> 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

0 new messages