【问题标题】:ImportError: cannot import moduleImportError:无法导入模块
【发布时间】:2012-02-24 16:01:19
【问题描述】:

包长这样:

  • 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

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

我能做什么?

【问题讨论】:

    标签: python importerror python-import


    【解决方案1】:

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

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

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

    【讨论】:

    • 我不知道你可以做一个单一的导入来避免循环依赖问题。酷!
    【解决方案2】:

    您最好的选择是重新组织依赖关系,这样您就不会遇到这种循环导入问题。除此之外,您可以简单地将行 from SmartDownload import DownloadFile 移动到 HTTPQuery.py 文件的底部以中断循环。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      相关资源
      最近更新 更多