I've the following source code structure
testapp/
├─ __init__.py
├─ testmsg.py
├─ sub/
│ ├─ __init__.py
│ ├─ testprinter.py
where testmsg
defines the following constant:
MSG = "Test message"
and sub/testprinter.py
:
import testmsg
print("The message is: {0}".format(testmsg.MSG))
But I'm getting ImportError: No module named testmsg
Shouldn't it be working since the package structure? I don't really want to extend sys.path in each submodule and I don't even want to use relative import.
What am I doing wrong here?
It all depends on which script you run. That script's path will be added to python's search path automatically.
Make it the following structure:
TestApp/
├─ testapp/
│ ├─ __init__.py
│ ├─ testmsg.py
│ ├─ sub/
│ │ ├─ __init__.py
│ │ ├─ testprinter.py
├─ README
├─ LICENSE
├─ setup.py
├─ run_test.py
Then run TestApp/run_test.py
first:
from testapp.sub.testprinter import functest ; functest()
Then TestApp/testapp/sub/testprinter.py
could do:
from testapp.testmsg import MSG
print("The message is: {0}".format(testmsg.MSG))
More good hints here;