在__main__.py中使用模块自己的对象

sha*_*vey 42 python program-entry-point init

我正试图从其内部访问模块的数据__main__.py.

结构如下:

mymod/
    __init__.py
    __main__.py
Run Code Online (Sandbox Code Playgroud)

现在,如果我__init__.py像这样公开一个变量:

__all__ = ['foo']
foo = {'bar': 'baz'}
Run Code Online (Sandbox Code Playgroud)

如何访问foo__main__.py

小智 23

你需要要么有包已经在sys.path中,添加包含目录mymod,以sys.path__main__.py,或使用-m开关.

添加mymod到路径将看起来像这样(in __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
Run Code Online (Sandbox Code Playgroud)

使用-m开关想:

python -m mymod
Run Code Online (Sandbox Code Playgroud)

有关更多讨论,请参阅此答案.

  • `sys.path.append(os.path.dirname(__ file __))`将把正在执行的文件的目录添加到sys.path (8认同)