Struggling to append a relative path to my sys.path

The two below alternate possibilities apply to both Python versions 2 and 3. Choose the way you prefer. All use cases are covered.

Example 1

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

Example 2

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

Explanations

  • sys.path[0] is /some/path/foo in both examples
  • os.path.join('a','b','c') is more portable than 'a/b/c'
  • os.path.dirname(mydir) is more portable than os.path.join(mydir,'..')

See also

Documentation about importing modules:

  • in Python 2
  • in Python 3

Leave a Comment