我的包具有以下结构:
myPackage
-- __init__.py <-- empty
-- signal.py
-- plot.py
signal.py 包含:
from plot import plot_signal
def build_filter():
...
def other_function():
plot_signal()
plot.py 包含:
from signal import build_filter
def plot_signal():
...
def other_function():
build_filter()
然后,我的脚本使用了这个包,其中包含以下内容:
import myPackage as mp
mp.plot.plot_signal()
当我运行它时,我得到一个属性错误:module 'myPackage' has no attribute 'plot'
我不确定为什么它plot
在我的包中的一个模块时被称为属性,或者为什么它被myPackage
称为模块。
然后我尝试导入我的包并以不同的方式调用该函数:
from myPackage import plot, signal
plot.plot_signal()
但是,现在我收到一个导入错误:cannot import name 'build_filter'
并且回溯指的是plot.py
它试图build_filter()
从同级模块导入函数的位置。
我认为这与这两个模块正在使用彼此的函数并递归导入另一个模块这一事实有关。
组织这个包以便兄弟模块可以相互导入函数的正确方法是什么?