我的包結構如下:如何從包中的兄弟模塊導入?
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()
功能來自兄弟模塊。
我在想這與2個模塊使用另一個函數並遞歸導入另一個模塊的事實有關。
什麼是正確的方式來組織這個軟件包,以便兄弟模塊可以相互導入功能?
@matino:我改變了語言標籤 「中的python-3.x的」,因爲這是在OP顯然是使用(Python 2裏產生不同的錯誤消息)。你爲什麼把它放回「蟒蛇」? – martineau
@martineau - 我認爲這個問題與所有版本的python有關,不管錯誤信息如何,但隨時可以恢復python-3x。 – matino
@matino:你有沒有在兩個版本中試過你的解決方案? – martineau