Python 3:如何从包中的模块导入__init__.py?

时间:2018-05-17 00:35:05

标签: python

我在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'

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

2 个答案:

答案 0 :(得分:0)

import foo可以正常使用。

答案 1 :(得分:0)

我找到了答案。添加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)