Использование собственных объектов модуля в __main__. py

Я пытаюсь получить доступ к данным модуля изнутри его __ main __. py .

Структура выглядит следующим образом:

mymod/
    __init__.py
    __main__.py

Теперь, если я выставлю переменную в __ init __. py , например:

__all__ = ['foo']
foo = {'bar': 'baz'}

Как я могу получить доступ к foo из __ main __. py ?

42
задан Zearin 18 October 2012 в 17:50
поделиться

2 ответа

Вам необходимо либо иметь пакет уже в 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

См. этот ответ для более подробного обсуждения.

23
ответ дан 27 November 2019 в 00:01
поделиться

Модуль __ init __ из пакета действует как члены самого пакета, поэтому объекты импортируются непосредственно из mymod :

from mymod import foo

Или

from . import foo

, если хотите быть кратким, прочтите об относительном импорте . Как всегда, вы должны убедиться, что вы не вызываете модуль как mymod / __ main __. Py , например, так как это помешает Python обнаружить mymod как пакет. Вы можете изучить distutils .

2
ответ дан 27 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: