In the below hierachy, is there a convenient and universal way to reference to the top_package using a generic term in all .py file below? I would like to have a consistent way to import other modules, so that even when the "top_package" changes name nothing breaks.
I am not in favour of using the relative import like "..level_one_a" as relative path will be different to each python file below. I am looking for a way that:
A decoupling reference to "top_package" in any .py file inside the package, so whatever name "top_package" changes to, nothing breaks.
This should do the job:
top_package = __import__(__name__.split('.'))
The trick here is that for every module the
__name__ variable contains the full path to the module separated by dots such as, for example,
top_package.level_one_a.my_lib. Hence, if you want to get the top package name, you just need to get the first component of the path and import it using
Despite the variable name used to access the package is still called
top_package, you can rename the package and if will still work.