1

在一个包中,我在每个模块目录中使用了一些检查,__init__.py以查看环境是否正常,然后from . import 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.db.foobar尽管有__all__数组,符号是否可见pkgname/__init__.py?即__all__数组是否只影响直接模块或任何较低级别?

哪些规则在这里管理 Python 的行为?我尝试了一些搜索,但空手而归。可能我使用了错误的搜索(__all__,,,pythonrelative import

4

1 回答 1

4

__all__在您描述的情况下无效。它只影响你做的事情from package import *。请参阅文档以及以前的 问题(我通过谷歌搜索找到的python __all__)。

于 2013-06-04T18:26:22.037 回答