0
嗨,我是新來的python,並認爲我與我建立的程序結構有問題。關於解決導入錯誤的結構建議
這是我想到的結構的摘錄。
.
└── asd
├── asd.py
├── __init__.py
├── Framework
│ ├── importer.py
│ └── __init__.py
├── Library
│ ├── libraryManager.py
│ └── __init__.py
在現實中還有更多的包在asd
下。 asd.py
是爲了'主'。它實例化了其他包中包含的不同類的許多對象,例如它有幾個libraryManager對象。進口商可以導入(不僅)庫文件。
我認爲我的關鍵缺陷如下:要使不同包中的類能夠訪問asd
的其他實例,他們將獲得對主要asd
作爲參數的引用。 這些都是有問題的文件:
asd.py
:
from asd.Framework.importer import importer
from asd.Library.libraryManager import libraryManager
class asd(object):
def __init__(self):
# instantiate several objects
self.nodeLibMng = libraryManager("DbNodeLibrary.txt")
self.importer = importer(self)
importer.py
:
from asd.asd import asd
class importer(object):
def __init__(self, asdRef : asd):
self.asdRef = asdRef
def importNode (self,item):
# The following line shows why I want this reference construct.
self.asdRef.nodeLibMng.appendItemToLibraryDB(item)
現在,如果我要運行asd.py我收到以下錯誤:
ImportError: No module named 'asd.Framework'; 'asd' is not a package
如果我在importer.py中運行測試代碼,我得到這個錯誤:
ImportError: cannot import name 'asd'
其他主題如ImportError: Cannot import name X建議我有循環依賴進口。
那麼我該如何解決這個問題,但要保持行爲,每個類都可以與asd
的實例進行通信?
編輯0: 我加入
if __name__ == '__main__':
asd=asd()
你有你的路徑上的'asd'目錄,而不是'asd'的*父目錄*。所以'asd.py'被認爲是一個頂級模塊,而不是目錄。 –
您是否使用'asd.py'作爲腳本?如果是這樣,不要。您不能將一個文件作爲腳本運行,因爲這會立即成爲路徑上的頂級目錄。將腳本*放在*包之外,或者使用'python -m'開關將模塊作爲腳本運行(具有'__main __。py'模塊的包可以使用該方法執行)。 –
這裏有太多叫做「asd」的東西。 –