Ну, я хотел бы объяснить немного больше.
Каждая программа на Python имеет один и только один глобальный иерархический модуль управления.Модули в sys.path
являются верхними модулями.Итак, возьмите ваш код в качестве примера:
root
----myPackage
--------module1 <- this is what you want.
--------module2
----module1 <- this does not exist.
Несмотря на то, что вы загружаете module1
в module2
, ему все равно необходимо подчиняться текущему управлению модулями, которое начинается вне пакета.
Этот дизайниспользуется для обеспечения синглтона на модулях.Все импортированные модули кэшируются в sys.modules
, поэтому для уникальной идентификации одного модуля все модули управляются на основе иерархии.
Другой пример:
В модуле 2:
from myPackage import module1
И в вашем основном файле:
from myPackage import module2
import sys
print(sys.modules)
Вы увидите один модуль с именем myPackage.module1
, хотя он импортирован в myPackage.module2
, но не называется myPackage.module2.myPackage.module1
.