Руководство по стилю PEP для импорта из модуля с очень вложенной структурой модуля

Предположим, мне нужна функция foo, а foo так получилось, что она определена в library.lgmodule.medmodule.smmodule.nichemodule.utils.something.else.

Есть ли более чистый способ написать:

from library.lgmodule.medmodule.smmodule.nichemodule.utils.something.else import foo

например сродни многострочному import:

from module.utiles import (foo, bar, baz, ban, ana,
    some, more, funcs, etc)

person SumNeuron    schedule 30.11.2018    source источник
comment
Я думаю, что эта проблема говорит вам о том, что вам нужна более чистая архитектура для ваших модулей. Вложенность выглядит слишком глубоко для меня. Отвечая только на то, что вы спросили, я думаю, вам всегда нужно где-то указывать путь, даже если вы прячете его за импортированным псевдонимом.   -  person progmatico    schedule 30.11.2018
comment
@progmatico может быть, но, увы, я не проектировал библиотеку. В любом случае, это не так уж важно   -  person SumNeuron    schedule 30.11.2018


Ответы (1)


Вы можете использовать importlib.import_module и использовать какое-то форматирование строк. Например:

from importlib import import_module

path = '.'join[
    'library',
    'lgmodule',
    'medmodule',
    'smmodule',
    'nichemodule',
    'utils',
    'something',
    'else'
]
foo = import_module('{}.foo'.format(path)
person Elias Strehle    schedule 30.11.2018
comment
Это альтернативный способ импорта модуля, но мне он не кажется более чистым. - person Delgan; 30.11.2018