ImportError: невозможно импортировать модуль - PullRequest
3 голосов
/ 24 февраля 2012

Упаковка выглядит так:

  • 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 голосов
/ 24 февраля 2012

Ваш лучший вариант - реорганизовать зависимости, чтобы у вас не было этой проблемы циклического импорта. За исключением этого, вы можете просто переместить строку from SmartDownload import DownloadFile в конец файла HTTPQuery.py, чтобы разорвать цикл.

Здесь немного обсуждается круговой импорт здесь .

3 голосов
/ 24 февраля 2012

Как вы предполагаете, существует круговая зависимость между HTTPQuery и SmartDownload.Простое решение состоит в том, чтобы перенести импорт в функции, которые в нем нуждаются, например

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

. Лучшим решением может быть реорганизация ваших модулей.Если нет разумного способа удалить зависимость HTTPQuery от SmartDownload или наоборот, рассмотрите возможность объединения их в один модуль.

...