gpt4 book ai didi

python - 如何从包中的同级模块导入?

转载 作者:行者123 更新时间:2023-12-02 03:28:29 25 4
gpt4 key购买 nike

我的包具有以下结构:

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()

当我运行此命令时,出现属性错误:模块“myPackage”没有属性“plot”

我不确定为什么当它是我的包中的模块时它引用 plot 作为属性,或者为什么它引用 myPackage 作为模块。

然后我尝试导入我的包并以不同的方式调用该函数:

from myPackage import plot, signal

plot.plot_signal()

但是,现在我收到导入错误:cannot import name 'build_filter' 并且回溯指的是 plot.py ,它试图在其中导入 来自同级模块的 build_filter() 函数。

我认为这与两个模块相互使用函数并递归导入另一个模块这一事实有关。

组织这个包以便同级模块可以互相导入函数的正确方法是什么?

最佳答案

要使 mp.plot.plot_signal() 工作,您必须在 myPackage.__init__.py导入plot。另一件事是,在plot.py和signal.py中,您应该导入整个模块以避免循环导入:

信号.py:

import myPackage.plot

myPackage.plot.plot_signal()

绘图.py

import myPackage.signal

myPackage.signal.build_filter()

您还可以在所有 3 个文件中使用相对导入,但它仅适用于 Python 3.x:

信号.py:

from . import plot

plot.plot_signal()

绘图.py

from . import signal

signal.build_filter()

关于python - 如何从包中的同级模块导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43656066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com