2015-01-11 3 views
0

структуры каталогов проекта My Django Django проекта выглядит следующим образом:ошибка импорта с

/sparestub 
//registration 
//messages 
//tickets 
//requests 
//venv 

Есть куча других папок, но вы получите идею. Один из модулей, установленных в моей виртуальной среде, - это запросы. Обратите внимание, что в моем приложении также есть модуль с запросами. Модуль запросов используется другим модулем, установленным в моей виртуальной среде, называемой djrill. Всякий раз, когда я пытаюсь запустить свой сервер, я получаю следующее сообщение об ошибке:

File "/Users/me/Documents/coding/sparestub/venv/lib/python3.4/site-packages/djrill/__init__.py", line 5, in <module> 
from djrill.exceptions import MandrillAPIError, NotSupportedByMandrillError 
    File "/Users/me/Documents/coding/sparestub/venv/lib/python3.4/site-packages/djrill/exceptions.py", line 1, in <module> 
from requests import HTTPError 
ImportError: cannot import name 'HTTPError' 

То, что я подозреваю, что происходит, что djrill пытается импортировать мой модуль запросов вместо модуля запросов в моей виртуальной environemnt и терпит неудачу потому, что он не имеет класса HTTPError.

Мое ближайшее предположение заключалось в том, что мой сайт django сделал свой путь в PYTHONPATH. Глядя на sys.path, я не вижу ничего инкриминирующего. Мое приложение называется sparestub.

Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path 
['', '/Users/me/Documents/coding/sparestub/venv/lib/python34.zip', 
'/Users/me/Documents/coding/sparestub/venv/lib/python3.4', 
'/Users/me/Documents/coding/sparestub/venv/lib/python3.4/plat-darwin', 
'/Users/me/Documents/coding/sparestub/venv/lib/python3.4/lib-dynload', 
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4', 
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin', 
'/Users/me/Documents/coding/sparestub/venv/lib/python3.4/site-packages', 
'/Users/me/Documents/coding/sparestub/venv/lib/python3.4/site-packages/newrelic-2.40.0.34'] 

Обратите внимание, что вторая-последняя строка предназначена для сайтов-пакетов. Я бы ожидал, что оператор запросов импорта найдет здесь модуль запросов вместо моего модуля запросов. Если у вас есть какие-либо объяснения относительно того, почему это происходит, мне бы очень хотелось помочь.

Спасибо!

ответ

1

Вы можете выбросить все ваши приложения Django в папку apps, так что вы назовете их apps.requests, которые больше не будут конфликтовать с библиотекой запросов.

+0

Я понимаю, что я мог бы использовать свои приложения, но зачем это нужно? Не sys.path определяет разрешение модуля? Если это так, почему система ищет мой модуль запросов до того, как он находится в виртуальной среде? – Nick

+0

Насколько я знаю, рабочая папка всегда смотрится сначала, то есть «в sys.path». –

+0

В итоге я просто изменил название приложения. Идея переделать весь мой импорт звучит как кошмар – Nick