2012-02-24 4 views
3

Пакет выглядит следующим образом:ImportError: не может импортировать модуль

  • 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 

Но я должен импортировать функции второго файла в третий файл и наоборот.

Что я могу сделать?

ответ

3

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

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

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

+0

Я не знал, что вы можете сделать особый импорт, чтобы избежать проблемы с круговой зависимостью. Круто! –

3

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

Немного обсуждается круглый импорт here.

Смежные вопросы