2012-02-24 244 views
3

包看起來是這樣的:導入錯誤:無法導入模塊

  • main.py
  • HTTPQuery.py
  • SmartDownload.py
在main.py

我跑from SmartDownload import DownloadFile

在Smartdownload.py我HTTPQuery運行 from HTTPQuery import Is_ServerSupportHTTPRange

我跑from SmartDownload import DownloadFile

我好像陷入一個循環,因爲這是錯誤

Traceback (most recent call last): 
    File "C:\Scripts\mp3grabber\main.py", line 13, in <module> 
    import HTTPQuery 
    File "C:\Scripts\mp3grabber\HTTPQuery.py", line 6, in <module> 
    from SmartDownload import DownloadFile 
    File "C:\Scripts\mp3grabber\SmartDownload.py", line 3, in <module> 
    from HTTPQuery import Is_ServerSupportHTTPRange 
ImportError: cannot import name Is_ServerSupportHTTPRange 

但我必須將第二個文件的函數導入第三個文件,反之亦然。

我該怎麼辦?

回答

3

如您所示,HTTPQuerySmartDownload之間存在循環依賴關係。簡單的解決方法是將導入移動到需要它的功能中,例如

# SmartDownload.py 
def download(url): 
    from HTTPQuery import Is_ServerSupportHTTPRange 
    ... 

更好的解決方案可能是重新組織您的模塊。如果沒有合理的方法去除HTTPQuerySmartDownload的依賴,反之亦然,考慮將它們合併成一個模塊。

+0

我不知道你可以做一個單一的導入,以避免循環依賴問題。涼! – 2012-02-24 17:01:11

3

你最好的選擇是重新組織依賴關係,所以你沒有這個循環導入問題。除此之外,您可以簡單地將from SmartDownload import DownloadFile行移動到HTTPQuery.py文件的底部以打破循環。

關於通知進口here有一些討論。