Предположим, что пакет структурирован так:
package/
__init__.py
__main__.py
foo.py
bar.py
__main__.py
в настоящее время имеет что-то вроде
import argparse
from . import foo
from . import bar
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
foo.init_subparser(subparsers.add_parser('foo', help=foo.__doc__)
bar.init_subparser(subparsers.add_parser('bar', help=bar.__doc__)
...
Реальная программа имеет гораздо больше модулей подкоманд, поэтому я хочу сделать это менее повторяющийся при переключении на al oop с динамическим импортом c, что-то вроде
import argparse
import importlib
SUBCOMMANDS = ['foo', 'bar']
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
for cmd in SUBCOMMANDS:
mod = importlib.import_module('.'+mod, 'package') # XXX
mod.init_subparser(subparsers.add_parser(cmd, help=mod.__doc__)
...
Это прекрасно работает , но сейчас, в точке, отмеченной XXX во втором фрагменте кода, Я должен знать и передать название пакета, что необязательно с from . import module
.
Итак, вопрос в том, как я могу выполнить эти относительные импорты Dynami c без необходимости вставлять имя пакета в мой код?
2.x совместимость не требуется.