[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