Reputation: 1198
Here is my project structure:
Project
main.py
myPackage/
subfolder1/
__init__.py
script11.py
script12.py
subfolder2/
__init__.py
script2.py
__init__.py
in main.py
I import script2.py
the following way :
from myPackage.subfolder2 import script2 as script2
then, I call a function from script2.py
in main.py
with :
bar = script2.foo()
and in script2
I need to import a function from script1
:
from ..subfolder1.script11 import my_function
and it breaks with the error :
attempted relative import with no known parent package
I have inspected the __name__
variable and indeed it has the value __main__
. How can I manage that properly ?
Upvotes: 0
Views: 436
Reputation: 1212
All you should have to do is change your import in main.py
to from myPackage.subfolder2 import script2
. I set up a directory and some files in this way, using that import, and the script runs as expected:
main.py
myPackage/
subfolder1/
script11.py
subfolder2/
script2.py
script11.py
def bar():
return 10
script2.py
from ..subfolder1.script11 import bar
def foo():
x = bar()
print('foo is', x)
main.py
from myPackage.subfolder2 import script2 as s2
s2.foo()
Running:
>>> py .\main.py
foo is 10
Some notes:
__init__.py
files aren't necessary to make a package, but having them doesn't hurt anything. You can leave them out if you want.as script2
part in from subfolder2 import script2 as script2
is redundant. It will already be imported as script2
.Upvotes: 1