ImportError:无法导入模块

时间:2012-02-24 16:01:20

标签: python importerror python-import

包看起来像这样:

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

我运行from SmartDownload import DownloadFile

Smartdownload.py中的

我运行from HTTPQuery import Is_ServerSupportHTTPRange

HTTP中的

我运行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

但我必须将第二个文件的函数导入第三个文件,反之亦然。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

如您所知,HTTPQuerySmartDownload之间存在循环依赖关系。简单的解决方法是将导入移动到需要它的函数中,例如

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

更好的解决方案可能是重新组织您的模块。如果没有合理的方法来删除HTTPQuerySmartDownload的依赖,反之亦然,请考虑将它们合并到一个模块中。

答案 1 :(得分:3)

您最好的选择是重新组织依赖项,以免出现此循环导入问题。除此之外,您可以简单地将行from SmartDownload import DownloadFile移动到HTTPQuery.py文件的底部以打破循环。

关于循环导入here有一些讨论。