Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > "#!/usr/bin/env python" vs. "#!/usr/bin/python"?

Reply
Thread Tools

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

 
 
Gilles
Guest
Posts: n/a
 
      09-28-2012
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.
 
Reply With Quote
 
 
 
 
Jussi Piitulainen
Guest
Posts: n/a
 
      09-28-2012
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.
 
Reply With Quote
 
 
 
 
Roy Smith
Guest
Posts: n/a
 
      09-28-2012
In article <(E-Mail Removed)>,
Gilles <(E-Mail Removed)> wrote:

> 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.
 
Reply With Quote
 
Gilles
Guest
Posts: n/a
 
      09-28-2012
On Fri, 28 Sep 2012 06:57:28 -0400, Roy Smith <(E-Mail Removed)> 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.
 
Reply With Quote
 
D'Arcy Cain
Guest
Posts: n/a
 
      09-28-2012
On Fri, 28 Sep 2012 06:57:28 -0400
Roy Smith <(E-Mail Removed)> 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 <(E-Mail Removed)> | 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: http://www.velocityreviews.com/forums/(E-Mail Removed)
 
Reply With Quote
 
Gilles
Guest
Posts: n/a
 
      09-28-2012
On Fri, 28 Sep 2012 09:19:54 -0400, D'Arcy Cain <(E-Mail Removed)>
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.
 
Reply With Quote
 
Demian Brecht
Guest
Posts: n/a
 
      09-28-2012
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
 
Reply With Quote
 
Matej Cepl
Guest
Posts: n/a
 
      09-30-2012
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/Featu...seSystemPython),
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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments