Я пытаюсь получить доступ к данным модуля изнутри его __ main __. py
.
Структура выглядит следующим образом:
mymod/
__init__.py
__main__.py
Теперь, если я выставлю переменную в __ init __. py
, например:
__all__ = ['foo']
foo = {'bar': 'baz'}
Как я могу получить доступ к foo
из __ main __. py
?
Вам необходимо либо иметь пакет уже в sys.path
, либо добавить каталог, содержащий mymod
, в sys.path
в __ main __. py
или используйте переключатель -m
.
Добавление mymod
к пути будет выглядеть примерно так (в __ main __. Py
):
import sys
import os
path = os.path.dirname(sys.modules[__name__].__file__)
path = os.path.join(path, '..')
sys.path.insert(0, path)
from myprog import function_you_referenced_from_init_file
Использование переключателя -m
может:
python -m mymod
См. этот ответ для более подробного обсуждения.
Модуль __ init __
из пакета действует как члены самого пакета, поэтому объекты импортируются непосредственно из mymod
:
from mymod import foo
Или
from . import foo
, если хотите быть кратким, прочтите об относительном импорте . Как всегда, вы должны убедиться, что вы не вызываете модуль как mymod / __ main __. Py
, например, так как это помешает Python обнаружить mymod
как пакет. Вы можете изучить distutils
.