Relative paths in Python
Relative paths in Python
In the file that has the script, you want to do something like this:
import os
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, relative/path/to/file/you/want)
This will give you the absolute path to the file youre looking for. Note that if youre using setuptools, you should probably use its package resources API instead.
UPDATE: Im responding to a comment here so I can paste a code sample. 🙂
Am I correct in thinking that
__file__
is not always available (e.g. when you run the file directly rather than importing it)?
Im assuming you mean the __main__
script when you mention running the file directly. If so, that doesnt appear to be the case on my system (python 2.5.1 on OS X 10.5.7):
#foo.py
import os
print os.getcwd()
print __file__
#in the interactive interpreter
>>> import foo
/Users/jason
foo.py
#and finally, at the shell:
~ % python foo.py
/Users/jason
foo.py
However, I do know that there are some quirks with __file__
on C extensions. For example, I can do this on my Mac:
>>> import collections #note that collections is a C extension in Python 2.5
>>> collections.__file__
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-
dynload/collections.so
However, this raises an exception on my Windows machine.
you need os.path.realpath
(sample below adds the parent directory to your path)
import sys,os
sys.path.append(os.path.realpath(..))
Relative paths in Python
As mentioned in the accepted answer
import os
dir = os.path.dirname(__file__)
filename = os.path.join(dir, /relative/path/to/file/you/want)
I just want to add that
the latter string cant begin with the backslash , infact no string
should include a backslash
It should be something like
import os
dir = os.path.dirname(__file__)
filename = os.path.join(dir, relative,path,to,file,you,want)
The accepted answer can be misleading in some cases , please refer to this link for details