2011-11-17 2 views
6

내 Django 프로젝트에서 profile이라는 응용 프로그램을 가지고 있는데 대부분 개체에 대한 추가 정보 (장고 사용자에게 익숙해 보일 수 있음)에 대한 내 profile.models.UserProfile 클래스가 들어 있습니다. 이제 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.plugins.prof 수입, profile을 수입하려고 수입 hotshot는. 그러나 profile프로젝트에서으로 가져 오지만 준비는 시스템 파이썬에서 가져와야합니다.

분명히 내 profile 모듈이 시스템 profile 모듈과 충돌합니다. 분명히 내 자신의 프로그래밍에서 파이썬 번들로 제공되는 모든 모듈 이름을 제외 할 수 없습니다. 그래서 질문은, 내가 여기서 어디로 가야합니까? 모든 앱에 대해 myproject 네임 스페이스를 만들어야합니까? 장고는 그것으로 작업 할 것인가?

PS : 테이블의 이름 hotshot_profile 나는 또한 내 프로젝트에 사용하고 pybb에서 Profile 클래스에 추가 아직 - 투 - 완전 분석 명명 충돌에서 오는 것 같다. 하지만이 질문의 범위 밖입니다.

답변

5

자신의 모듈을 import mymodule (상대 가져 오기) 양식으로 가져 오면 안됩니다. 대신 항상 import myproject.mymodule (절대 가져 오기)을 사용해야합니다. 이렇게하면 모든 이름 충돌을 피할 수 있습니다.

+1

나는 항상 내가 장고에 대한 모든 조언을 따라 절대 수입을 사용했다고 생각했다. 내 애플 리케이션을 네임 스페이스에 넣고 글로벌 경로에 넣고 말한대로 가져올 필요가있는 것 같다. 우리는 그것이 잘되는지 알 수 있습니다 :) –

관련 문제