Я хочу, чтобы импортировать модули динамически, следующим образом:__package__ не None при импорте модуля Python
создать папку с именем упак с этой структурой:
pkg
|__init__.py
|foo.py
В голове __init__.py
добавьте этот код fragement:
pkgpath = os.path.dirname(pkg.__file__);
for module in pkgutil.iter_modules([pkgpath]):
__import__(module[1], locals(), globals());
m = sys.modules[module[1]];
print m.__package__;
m.__package__
Я нашел это None
в случае нет импорта заявления в foo.py , но если добавить простой оператор импорта, как это:
import os
m.__package__
то есть «PKG», который является правильным именем пакета. Почему это происходит?
Как импортировать модуль и обеспечить его правильный атрибут пакета?
Трудно видеть вашу цель. По крайней мере, покажите, как вы собираетесь называть или импортировать pkg. –
Зачем вы хотите это сделать? Что вы на самом деле пытаетесь решить? –
Позвольте мне дать свою цель: мне нужно создать функцию для загрузки всех модулей пакета, который предоставляется во время выполнения. Пакет может быть вложенным, что означает, что в этом пакете есть дополнительный пакет. Если все модули правильно загружены, другая функция проанализирует взаимосвязь между любыми двумя модулями. Например, если атрибут __package__ в одном модуле является именем другого модуля, то последний является пакетом первого. – user541676