在一个包中,我在每个模块目录中使用了一些检查,__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__
,,,python
)relative import
?