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:
- Each python file can have the same import statement for the same module in the package.
-
A decoupling reference to “top_package” in any .py file inside the package, so whatever name “top_package” changes to, nothing breaks.
top_package/ __init__.py level_one_a/ __init__.py my_lib.py level_two/ __init__.py hello_world.py level_one_b/ __init__.py my_lib.py main.py
This should do the job:
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__import__.Despite the variable name used to access the package is still called
top_package, you can rename the package and if will still work.