Считайте, что это более усовершенствованная версия этого вопроса .
Кажется, структура модуля python привязана к фактическому каталогу, содержащему файлы. Хотя можно реэкспортировать другой модуль, используя __init__.py
, это не изменяет фактическую иерархию модулей в качестве журнала, как это касается средства импорта.
Например:
some_dir
├ main.py
└ mod_a
├ __init__.py
└ mod_b
└ mod_c.py
mod_a/__init__.py
:
from .mod_b import mod_c
mod_a/mod_b/mod_c.py
:
def foo():
print("Foo!")
В этом случае мы можем сделать это в main.py
:
from mod_a import mod_c
mod_c.foo()
, но не это:
import mod_a.mod_c
mod_c.foo()
, который завершается с:
Traceback (most recent call last):
File "main.py", line 1, in <module>
import mod_a.mod_c
ModuleNotFoundError: No module named 'mod_a.mod_c'
Так что init .py не может точно изменить иерархию модулей; И это самая близкая вещь к «изменению иерархии модулей» в python, о которой я знаю.
Итак, есть ли способ изменить иерархию модулей? Как в:
- способ сделать
import mod_a.mod_c
допустимым оператором импорта? - способ смонтировать некоторый модуль python по произвольному пути к некоторому пути импорта, в общем ?