Really at my wits end, tried multiple solutions including using a setup.py
file, changing relative imports to absolute imports and vice-versa, package restructuring, ensuring each package as an __init__.py file and more. Any help would be appreciated. I have simplified my project below.
My project structure is as follows:
myProject
|
|__ src
|
|__ foo
| - __init__.py
| |
| |__ bar
| - __init__.py
| |
| |__ baz
| - __init__.py
| - baz_functions.py
| - baz_watch.py
|
| - __init__.py
| - project_code.py
| - main.py
As for the files:
main.py
import project_code
if __name__ == '__main__':
project_code.run()
project_code.py
import foo.bar.baz.baz_functions
def run():
print('Hello World!')
baz_watch.py
from baz_functions import function_1, function_2
print('Watching...')
baz_functions.py
def function_1():
print('I am function 1')
def function_2():
print('I am function 2')
Naturally, without the: import foo.bar.baz.baz_functions
in project_code.py
, the code runs just fine.
The error I get is:
Traceback (most recent call last):
File "C:\xxx\xxx\xxx\myProject\src\main.py", line 1, in <module>
import project_code
File "C:\xxx\xxx\xxx\myProject\src\project_code.py", line 1, in <module>
import foo.bar.baz.baz_functions
File "C:\xxx\xxx\xxx\myProject\src\foo\bar\baz\baz_watch.py", line 1, in <module>
from baz_functions import function_1, function_2
ModuleNotFoundError: No module named 'baz_functions'
baz_functions
is not a top-level module; it lives in the package foo.bar.baz
and, using an absolute import, has to be imported as such.
A relative import can use .
to refer to a module in the same package as the importing module:
from .baz_functions import function1, function2