作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的包具有以下结构:
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/
我是一名优秀的程序员,十分优秀!