Я работаю над проектом Python со структурой каталогов, подобной этой:
foo/
├── bar
│ ├── bar1.py
│ ├── bar2.py
│ └── __init__.py
└── __init__.py
Где модуль bar1
определяет функцию function1
.
Я бы хотел, чтобы пользователи моего кода импортировали function1
(и ничего больше) напрямую из foo
, т.е. через from foo import function1
. Достаточно справедливо, что может быть достигнуто с помощью следующего foo/__init__.py
:
from .bar.bar1 import function1
__all__ = ['function1']
Проблема сейчас в том, что кто-то работает import foo
, например, REPL по-прежнему будет отображаться с foo.bar
рядом с foo.function1
при попытке автозаполнения foo.
. Есть ли способ «скрыть» существование bar
от пользователей без изменения его имени на _bar
?
Я мог бы пойти по этому пути совсем неправильно, поэтому я открыт для предложений о том, как реструктурировать мой код, но я бы хотел избежать переименования модулей.