В моем проекте Django есть приложение под названием profile
, которое в основном содержит мой класс profile.models.UserProfile
для получения дополнительной информации о Объекты пользователя
(могут показаться знакомыми людям Django). Теперь я поместил код инициализации в profile / __ init __. Py
(некоторые сигналы) и столкнулся с проблемой: Django сообщает мне, что таблица с именем hotshot_profile
не найдена.
После буквально часов поиска я проследил проблему до порядка импорта. Запустив python -v manage.py test
, я обнаружил следующее:
import nose.plugins.prof # precompiled from /home/rassie/.virtualenvs/myproject/lib/python2.6/site-packages/nose/plugins/prof.pyc
import hotshot # directory /usr/lib64/python2.6/hotshot
import hotshot # precompiled from /usr/lib64/python2.6/hotshot/__init__.pyc
dlopen("/home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so", 2);
import _hotshot # dynamically loaded from /home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so
import hotshot.stats # from /usr/lib64/python2.6/hotshot/stats.py
import profile # directory /home/rassie/MyProject/apps/profile
import profile # precompiled from /home/rassie/MyProject/apps/profile/__init__.pyc
Итак, мой Nose runner импортирует плагины nose.plugins.prof
(даже если этот плагин отключен), импортирует hotshot
, который пытается импортировать профиль
. Тем не менее, профиль
импортируется из моего проекта , тогда как он должен быть импортирован из системы Python.
Очевидно, мой собственный модуль профиля
конфликтует с модулем системного профиля
. Я, очевидно, не могу исключить каждое имя модуля, которое поставляется вместе с Python, из моего собственного программирования. Итак, вопрос в том, что мне делать дальше? Нужно ли мне создавать пространство имен myproject
для всех моих приложений? Будет ли работать с этим Django?
PS: Имя таблицы hotshot_profile
, похоже, возникло в результате еще не полностью проанализированного конфликта имен с классом Profile
из ] pybb
, который я также использую в своем проекте. Но это выходит за рамки этого вопроса.