是否可以从同一包中的模块访问__init__.py中的变量?

pro*_*eek 17 python package

我有一个包含good.py模块的hello1包.

hello1
??? __init__.py
??? good.py
Run Code Online (Sandbox Code Playgroud)

初始化模块有一个变量A = 1,我需要访问的变量hello1.A在good.py.

import hello1

class Good(object):
    def __init__(self):
        print hello1.A

if __name__ == "__main__":
    g = Good()
Run Code Online (Sandbox Code Playgroud)

问题是,当我执行python脚本时,我收到了ImportError: 'No module named hello1'错误.我可以import sys; sys.path.append("..")在第一行添加good.py快速修复.

但是,good.py位于hello1包中__init__.py也在其中,所以我想知道是否有办法从同一个包中的模块访问__init__.py中的变量.

pro*_*eek 7

Python:导入包含的包:

导入__init__似乎工作正常.

import __init__

class Good(object):
    def __init__(self):
        print hello1.A
Run Code Online (Sandbox Code Playgroud)

  • 你不应该直接导入`__init__`.相反,`hello1`的父目录应该在python模块搜索路径中列出,而应该导入`hello1`. (6认同)
  • @Cerin:不,最好避免将可执行文件放入包中。在 Python 3 中,您现在可以分配给 `__package__` 变量以使相对导入工作(参见 [PEP-366](https://www.python.org/dev/peps/pep-0366/)),之后您可以使用 `from 。import version`,但一般来说,您希望将可执行文件放在顶层。 (2认同)
  • @Cerin:我想你误解了我。`howdoi` 遵循最佳实践,是的,通过让 `setuptools` 创建一个控制台脚本(可执行文件)*外部*包。所以 `howdoi/howdoi` 不是脚本,它是一个服务于实际脚本的模块,所以 `from . import __version__` 在那里工作,因为 `howdoi` 仍然是一个包。*该包中没有任何地方存在也不需要`import __init__`。 (2认同)