Как мне избежать конфликтов имен в модульной системе Python?

В моем проекте 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 , который я также использую в своем проекте. Но это выходит за рамки этого вопроса.

6
задан Nikolai Prokoschenko 17 November 2011 в 17:03
поделиться