Вы можете, и это довольно просто, но os.path
будет немного странно:
def assemble_import(module, name):
return 'import {} as {}'.format(module.__name__, name)
os.path
странно, потому что это зависимый от платформы псевдоним для модуля ntpath
или модуль posixpath
. Эта функция будет использовать фактическое имя модуля, либо ntpath
, либо posixpath
. Если вы хотите трактовать os.path
как os.path
, вы можете использовать его в особом случае, хотя это может быть не лучшим выбором для проектирования.
Для актуальных субмодулей пакета, таких как collections.abc
, эта функция будет обрабатывать их как подмодули содержащего их пакета:
>>> assemble_import(collections.abc, 'abc')
'import collections.abc as abc'
, но для os.path
, это даст вам вывод типа
>>> assemble_import(os.path, 'path')
'import posixpath as path'
Если вы хотите импорт, который выглядит немного более похожим на то, что обычно пишет человек, вы можете добавить к функции несколько логик c:
def assemble_import(module, name):
pname, _, mname = module.__name__.rpartition('.')
if pname:
statement = 'from {} import {}'.format(pname, mname)
else:
statement = 'import ' + mname
if mname != name:
statement += ' as ' + name
return statement