I am using python 2.7 and have the following project structure
main-folder
--folder1
- script.py
--folder2
- scr.py
-- abc.py
-- util.py
I am trying to import abc.py into util.py using
from main-folder import abc
but I am not getting error as below
ImportError: No module named main-folder
I also tried to append the path to main-folder to the path using
sys.path.append(r'path/to main-folder/main-folder')
I also have init.py in main-folder , folder1 & folder2
I'll assume your package is not actually called main-folder
because that's a syntax error.
sys.path
/ PYTHONPATH
is where Python looks for modules, so adding a folder to sys.path means what's in it can be imported (as a top-level module), it doesn't make the folder itself importablemain-folder/folder1
is what's on your PYTHONPATH, and that obviously can't access abc or utils no matter how you slice itimport <foo>
or from <foo> import <bar>
is an absolute import, it starts its search from the PYTHONPATH[0]PYTHONPATH=. python main-folder/folder1/script.py
will also add whatever .
is to your PYTHONPATH, which may be what you want?__init__
and a bunch of submodules), it's probably better to use relative imports e.g. util
should use from . import abc
if they're supposed to be sibling submodules of the same package[0] that's not actually true for Python 2, as PEP 328 necessarily had to keep the old behaviour working but you probably want to assume it regardless, you can "opt out" of the old behaviour by using the __future__
stanza listed in the PEP