How To Use __init__.py In (sub-)modules To Define Namespaces?
Solution 1:
Is this a good python-like way to define namespaces? Or is there a better / common way to organize the file-system of a package in python. (I did not find a proper tutorial/example for this.)
This is an okay way to setup a Python package. Only okay and not 'good' because of the contents of foo.py
and bar.py
.
I don't like to use
package.foo.foo()
/package.subpackage.bar.bar()
and would like to usepackage.foo()
/package.subpackage.bar()
.
In this case, you can't. And not mixing the name spaces is good reason to not do from package.subpackage.bar import bar
.
It would have been better if def foo(): ...
and def bar(): ...
were directly in __init__.py
. That way, you could have done package.foo()
and package.subpackage.bar()
. It could also have been done by using __all__
in init but import *
is also not considered good.
Or, the foo
and bar
packages should have had more in it like foo.function1
, foo.other_func
, bar.drink
, etc. which gives it more human-friendly understandable organisation.
Examples and references are not within scope for good StackOverflow questions but here are some, for a well thought-out question:
Solution 2:
The answer to the second question:
In file
package/subpackage/__init__.py
, why does it have to be:
from package.subpackage.bar import bar
and not:
from subpackage.bar import bar
?
is that you have to use from .bar import bar
. The dot is used when you want to do relative imports inside a package structure. See: https://docs.python.org/3/tutorial/modules.html#intra-package-references
Post a Comment for "How To Use __init__.py In (sub-)modules To Define Namespaces?"