CPython如何实现os.environ?

How does CPython implement os.environ?

我正在浏览 source 并注意到它在定义之前在方法中引用了一个变量 environ

def _createenviron():
    if name == 'nt':
        # Where Env Var Names Must Be UPPERCASE
        def check_str(value):
            if not isinstance(value, str):
                raise TypeError("str expected, not %s" % type(value).__name__)
            return value
        encode = check_str
        decode = str
        def encodekey(key):
            return encode(key).upper()
        data = {}
        for key, value in environ.items():
            data[encodekey(key)] = value
    else:
        # Where Env Var Names Can Be Mixed Case
        encoding = sys.getfilesystemencoding()
        def encode(value):
            if not isinstance(value, str):
                raise TypeError("str expected, not %s" % type(value).__name__)
            return value.encode(encoding, 'surrogateescape')
        def decode(value):
            return value.decode(encoding, 'surrogateescape')
        encodekey = encode
        data = environ
    return _Environ(data,
        encodekey, decode,
        encode, decode)

# unicode environ
environ = _createenviron()
del _createenviron

那么 environ 如何设置?我似乎无法推断它的初始化和声明位置,以便 _createenviron 可以使用它?

TLDR 在 os 模块内容中搜索 from posix import *

os 模块从 posix (Unix) 或 nt (Windows) low-level 模块导入所有 public 符号os.py.

的开头

posixenviron 公开为普通的 Python dictos_Environ dict-like 对象包装它,在 _Environ 项目发生变化时更新环境变量。