[Baypiggies] Locating the directory you are executing from

Atul Varma varmaa at gmail.com
Wed May 7 08:04:00 CEST 2008


Kelly,

I think one nice thing about using __file__ is that it doesn't necessarily
require your Python file to be the main script that's being executed, as
sys.argv[0] does.  For instance, I could have my own script called "foo",
and then import "bar", which loads something relative to its (i.e., bar's)
location in the filesystem.  If "bar" uses sys.argv[0], it would find the
path to foo, but if it uses __file__, it will always find the correct path
regardless of whether it's imported as a module or run as a script.

- Atul

On Tue, May 6, 2008 at 10:22 PM, Kelly Yancey <kelly at nttmcl.com> wrote:

> Shannon -jj Behrens wrote:
>
> > On Sun, May 4, 2008 at 1:15 PM, Aahz <aahz at pythoncraft.com> wrote:
> >
> > > On Sun, May 04, 2008, Jeff Younker wrote:
> > >  >
> > >  > I have a set of development scripts.  The scripts can potentially
> > >  > be executed from many places.  They reference information which is
> > >  > relative to their installation paths.  (These are build scripts.)
> > >  >
> > >  > The CI system can supply a fixed root, but when run by the
> > > developers
> > >  > I'd like them to be runnable from anywhere in the project, and
> > > still
> > >  > have them work.
> > >
> > >  If you're willing to require that the script directory NOT be on the
> > >  path, just do some manipulation of sys.argv[0].  Otherwise, __file__
> > > is
> > >  the right approach.
> > >
> >
> > Heh, I have this same problem ;)
> >
> > -jj
> >
> >
>  Here is the snippet I've been using.  It supports running both as a
> python script and as a binary created by py2exe.  It also works on systems
> that return paths encoded with with non-ASCII character sets (e.g. non-U.S.
> version of Windows).
>
>    import locale
>    import os
>    import sys
>
>    if hasattr(sys, 'frozen'):
>        # Running as executable generated by py2exe.
>        runpath = sys.executable
>    else:
>        # Running as python script.
>        runpath = sys.argv[0]
>    rundir = os.path.dirname(unicode(runpath,
>                                     locale.getpreferredencoding()))
>
>  I am curious though: how is extracting the path from __file__ better than
> extracting it from sys.argv[0]?  The best I can tell (from simple test
> scripts) is that both yield the same results.
>
>  Kelly
>
> --
> Kelly Yancey
> http://kbyanc.blogspot.com/
>
> _______________________________________________
> Baypiggies mailing list
> Baypiggies at python.org
> To change your subscription options or unsubscribe:
> http://mail.python.org/mailman/listinfo/baypiggies
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/baypiggies/attachments/20080506/3c1107a6/attachment.htm>


More information about the Baypiggies mailing list