2012-02-24 243 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有一些讨论。