[Tutor] sys.path and the path order

Dave Angel davea at ieee.org
Fri Apr 23 10:23:30 CEST 2010

Garry Willgoose wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">My 
> question is so simple I'm surprised I can't find an answer somewhere. 
> I'm interested if I can rely on the order of the directories in the 
> sys.path list. When I'm running a file from the comand line like
> python tellusim.py
> The string in entry sys.path[0] appears to be the full path to the 
> location of the file I'm running in this case tellusim ... i.e. it 
> looks like '/Volumes/scone2/codes/tellusim0006'. This is good because 
> for my code I need to create a search path for modules that is 
> relative to the location of this file irrespective of the location I'm 
> in when I invoke the script file (i.e. I could be in /Volumes/scone2 
> and invoke it by 'python codes/tellusim0006/tellusim.py').
> The question is can I rely on entry [0] in sys.path always being the 
> directory in which the original file resides (& across linux, OSX and 
> Windows)? If not what is the reliable way of getting that information?
As Steven says, that's how it's documented.

There is another way, one that I like better.  Each module, including 
the startup script, has an attribute called __file__, which is the path 
to the source file of that module.

Then I'd use os.path.abspath(), and os.path.dirname() to turn that into 
an absolute path to the directory.

The only exception I know of to __file__ usefulness is modules that are 
loaded from zip files.  I don't know if the initial script can come from 
a zip file, but if it does, the question changes.


More information about the Tutor mailing list