gpt4 book ai didi

python - __all__ 和相关导入的规则是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 10:46:33 26 4
gpt4 key购买 nike

在一个包中,我在每个模块目录的 __init__.py 中使用一些检查来查看环境是否正常,然后使用 from 。为嵌套模块导入 mod1(此处为 mod1)。每个模块目录依次包含一个 __init__.py(显然),它将导入下一个较低级别(如果有)。

一些 __init__.py 包含 __all__ 数组以仅在 import 时公开某些名称。

假设我有以下“主要”脚本 (spam.py):

import os, sys

if (sys.version_info[0] != 2) or (sys.version_info < (2,7)):
sys.exit("...")
else:
import pkgname

def main():
pass

if __name__ == '__main__':
main()

和以下 pkgname/__init__.py:

import sys
if __name__ == '__main__':
sys.exit(0)
else:
from . import db
from os.path import dirname, realpath
sys.modules[__name__].__all__ = ['inipath']
sys.modules[__name__].__dict__['inipath'] = dirname(realpath(__file__)) + '.ini'

和以下pkgname/db/__init__.py:

import sys
if __name__ == '__main__':
sys.exit(0)
else:
import sqlite3
# ...
foobar = { 'spam' : 'egg' }

__all__ = ["foobar"]

尽管 pkgname/__init__.py 中有 __all__ 数组,符号 pkgname.db.foobar 是否可见? IE。 __all__ 数组只影响直接模块还是任何更低级别?

哪些规则支配 Python 的行为?我尝试了一些搜索,但一无所获。可能我使用了错误的搜索(__all__pythonrelative import)?

最佳答案

__all__ 在您描述的情况下无效。它只会影响您执行 from package import * 时发生的情况。参见 the documentation以及previous questions (这是我通过谷歌搜索 python __all__ 找到的)。

关于python - __all__ 和相关导入的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com