Импорт модуля, который импортирует другие модули

Есть модуль main.py:

try:
    from importer import Importer
    Importer._import_modules()
    
except ImportError:
    raise ImportError('Please reinstall module')

class Module(OtherModule):

    def __init__(self):
        super(Module, self).__init__()
        self.__version = settings.__version__
        self.debug = settings.DEBUG
        self.__author = settings.__author__ 
        self.settings = {
            "author": self.__author,
            "version": self.__version,
            "debug": self.debug
        } 

    self.debug_text = {} 

есть модуль importer.py:

class Importer:
    @staticmethod
        def _import_modules():
            try:
                import pymysql
                from rich import print
                from rich.console import Console
                from rich.table import Table
                from rich.text import Text
                from prettytable import PrettyTable

            except ImportError:
                raise ImportError("Please install required modules.")

            try:
                import settings
                from somemodule import SomeClass
            except ImportError:
                raise ImportError('Please reinstall module')

            try:
                import sqlite3
            except ImportError:
                raise ImportError("Standard modules could not be imported")

Как мне реализовать импорт модулей в другом файле и потом этот же файл импортировать?


Ответы (1 шт):

Автор решения: nomnoms12

Вам не нужно выносить импорты в отдельный файл, это плохая практика. Импортируйте всё, что нужно, в начале модуля


Но если интересно, то Ваш код не работает, потому что импорты производятся в теле функции, т.е. в локальной области видимости. Вы не можете получить к ним доступ ни через объект модуля, ни через класс, ни через функцию — по аналогии с объявлением локальной переменной.

Решением может быть вынос импортов в глобальную область видимости модуля:

import sqlite3
from importer import *
sqlite3

Ещё можно сделать импортируемый модуль статическим методом класса:

class Importer:
    import sqlite3
    sqlite3 = staticmethod(sqlite3)
from importer import Importer
Importer.sqlite3
→ Ссылка