[Baypiggies] Locating the directory you are executing from
Kelly Yancey
kelly at nttmcl.com
Wed May 7 09:15:35 CEST 2008
Atul Varma wrote:
> 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
>
Atul,
That makes sense. I've only ever needed the path to the main
executable so I never noticed. But now that you mention it, I can
imagine scenarios where you might need a path to a source file other
than the main executable. Thanks,
Kelly
> On Tue, May 6, 2008 at 10:22 PM, Kelly Yancey <kelly at nttmcl.com
> <mailto:kelly at nttmcl.com>> wrote:
>
> Shannon -jj Behrens wrote:
>
> On Sun, May 4, 2008 at 1:15 PM, Aahz <aahz at pythoncraft.com
> <mailto: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 <mailto:Baypiggies at python.org>
> To change your subscription options or unsubscribe:
> http://mail.python.org/mailman/listinfo/baypiggies
>
>
More information about the Baypiggies
mailing list