导入错误:无法导入模块。

3
这个包看起来像这样:
  • main.py
  • HTTPQuery.py
  • SmartDownload.py

在 main.py 中我运行 from SmartDownload import DownloadFile

在 Smartdownload.py 中我运行 from HTTPQuery import Is_ServerSupportHTTPRange

在 HTTPQuery 中我运行 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个回答

3

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

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

更好的解决方案可能是重新组织您的模块。如果没有合理的方法可以消除HTTPQuerySmartDownload或反之的依赖关系,请考虑将它们合并为一个模块。

我不知道你可以进行单个导入以避免循环依赖问题。太棒了! - Adam Parkin

3
你最好的选择是重新组织依赖项,以避免出现循环导入问题。如果无法做到这一点,你可以将 from SmartDownload import DownloadFile 这一行移到 HTTPQuery.py 文件的底部以打破循环。
关于循环导入问题,这里有一些讨论:链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接