@kaktak255

Почему когда импортирую пакет из модуля с помощью importlib, импортируется весь модуль?

Делаю так:
from importlib import import_module

a = import_module('time', package='sleep')
print(a.time())

То что вывело:
1611760669.8736699
[Finished in 0.5s]
----------------------
И тоже самое происходит когда импортирую какую либо функцию из обычного файла .py , импортируется все имеющиеся в файле функции..

Это получается я импортирую пакет sleep из модуля time , а импортируется весь модуль полностью.

В чем проблема?
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
@bbkmzzzz
да, импортируется весь модуль. Импорт идет в определенное пространство имен
import time
time.time()

from time import time
time()

from time import *
time()

более того - импорт это выполнение, для этого и стоит использовать конструкцию
if __name__ == '__main__':
    pass

в __name__ содержится имя текущего модуля, но если это модуль, который был запущен изначально, то в __name__ содержится "__main__"

импорт модулей похож на синглтоны, так что модули загружаются 1 раз, вне зависимости от количества импортов, разница только в том, в какое пространство имен будут загружены символы из модуля.

сохраните нижний код как модуль и импортируйте его.
print('модули выполняются при импорте')
if __name__ == '__main__':
    print('а это выполнено не будет')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы