【问题标题】:Python 3: How do I import __init__.py from a module in its package?Python 3:如何从包中的模块导入 __init__.py?
【发布时间】:2018-10-27 03:35:28
【问题描述】:

我使用的是 Python 3.7。我创建了一个 foo 模块,它具有以下文件夹布局:

foo/
    __init__.py

我将 foo 包的所有代码放在 __init__.py 文件中。我可以像往常一样从其他脚本运行import foo

后来,我想在这个包中添加一个 util.py 文件。文件夹布局变为:

foo/
    __init__.py
    util.py

我的问题是:在 util.py 中,我想访问 __init__.py 中定义的类、函数等。如何从 util.py 文件中“导入”__init__.py?这甚至可能吗?如果我必须重新排列我的代码,那该怎么做?

我尝试将以下内容添加到 util.py

from . import __init__
print(__init__.some_var_in_init)

但我收到此错误消息:

Traceback (most recent call last):
  File "util.py", line 3, in <module>
    print(__init__.some_var_in_init)
AttributeError: 'method-wrapper' object has no attribute 'some_var_in_init'

所以我猜这不是解决问题的方法。

【问题讨论】:

    标签: python


    【解决方案1】:

    import foo 可以正常工作。

    【讨论】:

      【解决方案2】:

      我找到了答案。添加import foo是不够的,还必须添加父文件夹:

      import os, sys
      sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
      
      import foo
      print(foo.some_var_in_init)
      

      【讨论】:

        猜你喜欢
        • 2013-07-29
        • 2013-04-21
        • 2021-11-08
        • 2015-07-30
        • 2019-05-29
        • 1970-01-01
        • 2012-11-25
        • 1970-01-01
        • 2016-06-14
        相关资源
        最近更新 更多