[Baypiggies] Locating the directory you are executing from
Kelly Yancey
kelly at nttmcl.com
Wed May 7 07:22:36 CEST 2008
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/
More information about the Baypiggies
mailing list