Поместите ваш пакет и скрипт main
во внешнюю директорию контейнера, например:
container/
main.py
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
запущен, его родительский каталог (container
) будет автоматически добавлен в начало sys.path
. И поскольку top_package
теперь находится в том же каталоге, его можно импортировать из любого места в дереве пакетов.
Так что hello_world.py
может импортировать level_one_b/my_lib.py
так:
from top_package.level_one_b import my_lib
Независимо от того, какое имя каталога контейнера или где он расположен, импорт всегда будет работать с этим расположением.
Но обратите внимание, что в вашем исходном примере top_package
может легко функционировать как сам каталог контейнера. Все, что вам нужно сделать, это удалить top_package/__init__.py
, и вы останетесь в том же положении.
Предыдущий оператор импорта изменится на:
from level_one_b import my_lib
и вы можете переименовать top_package
так, как пожелаете.