我试图找到一种在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()'函数?我在这里做错了什么?
之所以要这样做,是因为我想要一个日志函数,可以在子包中的任何地方使用它,而不必在每个子包中重新创建它。
我对整个软件包还是很陌生,所以请不要用力烘烤我:)
__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] 删除。
我来说两句