2014-07-07 2 views
1

최신 Django 1.6으로 변환하려고 시도하는 구형 django 프로젝트 (1.3이 뜨거울 때 생성됨)가 있습니다.Django 업그레이드, 가져 오기 오류 및 충돌하는 패키지 이름

새로운 디렉토리 strucure 모든 수입 (from myproject.api import xfrom api import x되었다)에서 새로운 방식으로 전환되고, 프로젝트 이름을 제거

myproject/ 
    myproject/ 
     __init__.py 
     settings.py 
     urls.py 
    api/ 
     __init__.py 
     resthandler.py 
    platforms/ 
     __init__.py 
     plat1/ 
      __init__.py 
      handlers.py 
      api/ 
       __init__.py 

문제는 플랫폼/plat1/핸들러 /에서 가져올 시도하는 것입니다 낮은 수준의 API를 이미 존재하는 한 resthandler가 아니므로 api.resthandler 수입 restHandler에서 API/resthandler.py

, 그것은 ImportError를 가진 그것의 2 개 수준 실패 위로/아래로/api. 프로젝트 수준을 가져 오기로 되돌려 보았습니다. 상대적인 가져 오기를 시도했지만 도움이되지 않았습니다. 플랫폼/plat1/내에서/api를 가져올 수 없습니다. 나는 전체 구조를 변경하려고했지만 그 길을 가기 전에 내가 놓친 것을보고 싶었습니다.

+0

api/__ init__.py에 아무 것도 없습니다. – fixmycode

+0

아니요, /api/__init__.py가 비어 있습니다. 내부 코드에는 코드가 있습니다. (상당 부분) – Harel

답변

0

을 수행, 이에 대한 해결책은 미래에서 absolute_imports를 가져올 수 있었다.

from __future__ import absolute_imports

상대적으로 수입이 명시 적으로 점 표기법을 사용하여 지정하지 않는 한 모든 수입은, 루트에서 절대 그런 식으로.

0

파이썬의 동작은 django가 아닙니다. U는 폴더의 이름을 변경할 수 있습니다. 나머지는 해결 방법이며 더 많은 문제를 일으킬 수 있습니다.

+0

예 Python은 아니고 장고를 알고 있지만 최소한의 변경만으로이 마이그레이션을 수행하고 싶습니다. 나는 확실히 우아한 솔루션을 찾을 수 없다면 나는 dir 이름을 바꿀 것이다. 그러나 나는 먼저 시도해야한다 :) – Harel

+0

또는 myproject 안에/api 이동/ – Harel

+0

만약에 파이썬 방식으로 뭔가를 만들고 싶다면 확실히 우아한. 우리는 여기에 관용구가 있습니다. 신에 대한 단 하나의 진정한 방법이 있습니다 (: – obayhan

0

당신은

문제는 플랫폼/plat1/핸들러 api.resthandler 가져 오기 RestHandler에서 /api/resthandler.py

에서 가져올 시도하는 것입니다 말할 때

당신을 루트 수준 "api"또는 현재 폴더 하나를 가져 오시겠습니까? 현재 폴더를 원하는 경우 가, 나중에 참조 할 수 있도록이 작품?

from .api import resthandler.RestHandler as Plat1RestHandler 
+0

반대쪽 - 루트 수준의 API 이후입니다 ... – Harel

관련 문제