如何从包的更深层部分访问__init__.py变量

时间:2010-05-18 19:36:28

标签: python

我为另一个__init__.py问题道歉。

我有以下包结构:

+contrib
  +--__init__.py
  |
  +database
      +--__init__.py
      |
      +--connection.py

在顶级__init__.py我定义:USER='me'。如果我从命令行import contrib,那么我可以访问contrib.USER

现在,我想从withih contrib.user访问connection.py,但我不能这样做。

当我发出__init__.py时会调用顶级from contrib.database import connection,因此Python实际上是在创建参数USER

所以问题是:如何从 children 中访问顶级__init__.py中声明的参数和变量。

谢谢。

编辑:

我意识到您可以将import contrib添加到connection.py,但它似乎是重复的,因为很明显(错误的是这样?)如果您需要connection.py,您已导入{{1} }}

2 个答案:

答案 0 :(得分:13)

import contrib添加到connection.py是可行的方法。是的,contrib模块已经导入(您可以从sys.modules找到)。问题是您的connection.py代码中没有对模块的引用。进行另一次导入将为您提供参考。您无需担心额外的加载时间,因为模块已经加载。

答案 1 :(得分:0)

您需要在contrib中导入connection。使用相对导入(..contrib)或绝对导入。