So there are a lot of pretty similar questions but none of the answers seems to satisfy what I'm looking for.
Essentially I am running a python script using an absolute directory in the command line.
Within this file itself, I want to import a module/file,I currently use an absolute path to do this (sys.path.append(/....)
.
But I would like to use a relative path, relative to the script itself.
All I seem to be able to do is append a path relative to my present working directory.
How do I do this?
The two below alternate possibilities apply to both Python versions 2 and 3. Choose the way you prefer. All use cases are covered.
main script: /some/path/foo/foo.py
module to import: /some/path/foo/bar/sub/dir/mymodule.py
Add in foo.py
import sys, os
sys.path.append(os.path.join(sys.path[0],'bar','sub','dir'))
from mymodule import MyModule
main script: /some/path/work/foo/foo.py
module to import: /some/path/work/bar/mymodule.py
Add in foo.py
import sys, os
sys.path.append(os.path.join(os.path.dirname(sys.path[0]),'bar'))
from mymodule import MyModule
sys.path[0]
is /some/path/foo
in both examplesos.path.join('a','b','c')
is more portable than 'a/b/c'
os.path.dirname(mydir)
is more portable than os.path.join(mydir,'..')
Documentation about importing modules: