I am writing a library in python. It has one package and 3 modules, such as
mypackage __init__.py utils.py fileio.py math.py If I just leave the __init__.py empty, my users must figure out which functions are in which modules, which is annoying. The fact that I have three modules is an implementation detail that is not important.
Maybe I should import the main functions into the __init__.py, like this
from .utils import create_table from .fileio import save_rows, load_rows from .math import matrix_inverse so that my users can just do
import mypackage as myp rows = myp.load_rows() Is that best practice?
What about the alternative to put ALL symbols into the __init__.py, such as
from .utils import * from .fileio import * from .math import * And if there are any functions that I don't want to expose, I will prefix them with underscore. Is that better? It certainly is easier for me.
What if the fileio.py needs to call some functions in the utils.py? I could put
from .utils import * into the fileio.py, but won't that create a circular or redundant reference? What's the best way to handle this?