Python:从包内访问__init__.py函数

DevShot:

我试图找到一种在widgets/__init__.py文件中定义日志功能的方法,然后可以在子包中使用它。

目前,我具有以下文件结构:

app.py
widgets/__init__.py
widgets/input/__init__.py
widgets/input/input.py

app.py的内容:

import widgets

widgets.input.create_foo()

内容widgets/__init__.py

from .input import input

def foo():
    print('foo')

内容widgets/input/input.py

from .. import foo

def create_foo():
    foo()

如果以这种方式运行它,则会收到错误消息“ ImportError:无法从导入来自'widgets'的名称'foo' widgets/__init__.py这很有意义,因为我尝试导入尚未创建的函数。

我想避免仅为此1函数创建单独的模块或子包。有没有一种干净的方法widgets/__init__.py可以在子包中定义'foo()'函数我在这里做错了什么?

之所以要这样做,是因为我想要一个日志函数,可以在子包中的任何地方使用它,而不必在每个子包中重新创建它。

我对整个软件包还是很陌生,所以请不要用力烘烤我:)

RafalS:

__init__.py没有必要。从python 3.3开始,每个python文件都是一个名称空间包此外,相对进口可能会比较棘手。我建议绝对导入方法:

.
├── app.py
└── widgets
    ├── input
    │   ├── input.py
    │   └── __pycache__
    ├── __pycache__
    └── utils.py

app.py:

from widgets.input.input import create_foo

create_foo()

input.py:

from widgets.utils import foo

def create_foo():
    foo()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章