2014-12-30 3 views
2

저는 absolute_import 함수를 Python 2.7에서 사용하고 싶습니다. 왜냐하면 파이썬 2.7에서는 아무런 내용도 없다. absolute_import 그래서 나는 이것을 이렇게 가져와야한다. 내 장고 프로젝트에서Django 프로젝트에서 절대 가져 오기를 한 번만 가져 오기

from __future__ import absolute_import

나는 등 models.py, views.py와 같은 파일을 많이 가지고 있어요. 그리고 각 파일의 상단에 내가 가진

from __future__ import absolute_import

이 기능을 사용할 수 있도록 넣어.

질문은 다음과 같습니다. 프로젝트에서 absolute_import을 한 번만 가져올 수 있다면 어디서나 사용할 수 있습니까?

+2

"한 번만 가져 오기"란 정확히 무엇을 의미합니까? 파이썬은 명시 적으로'reload() '하거나 다른 멋진 가져 오기 기능을 사용하지 않는 한 모듈을 한 번만 가져옵니다. – cpburnz

+0

하지만 왜 각 패키지에 필요합니까? 대부분의 경우 한 모드를 사용하든 다른 모드를 사용하든 별 차이가 없습니다. 이것은 모호성이있는 경우에만 관련이 있습니다. – newtover

+0

Django 프로젝트를 가지고 있는데 프로젝트의 각 모듈의'views.py','forms.py' 등 모든 파일에서 absolute_import를 사용하고 싶습니다. – micgeronimo

답변

2

absolute_import을 자주 사용하는 문제는 일반적으로 패키지 내의 모호함으로 인해 발생합니다. 여러 하위 패키지를 개발하고 최상위 패키지를 사용하기 위해 계속해서 absolute_import을 사용해야하는 경우 문제의 하위 패키지 이름 만 변경하면됩니다. 어쨌든 좋은 생각입니다.

+1

좋은 그가 완전히 말하고있는 것을 이해하지 못했다. –

1

import 문에 의해 호출되는 __import__ built-in function을 다시 정의 할 수 있습니다. 이를 통해 absolute_import의 동작을 에뮬레이션 할 수 있습니다.

# This function will replace __builtin__.__import__. 
# By default, the fifth argument (level) is not supplied. 
# We use the value 0, which means absolute import. 
def new_import(name, globals, locals, fromlist, level=0): 
    # Call the original function. 
    return orig_import(name, globals, locals, fromlist, level) 

import __builtin__ 
# Save a reference to the original function. 
orig_import = __builtin__.__import__ 
# Replace it with the new one. 
__builtin__.__import__ = new_import 

지금, 어디 프로그램의 모든 import 문이 명시 적으로 상대 가져 오기 구문을 사용하지 않는 한 그들이, 절대 수입을 수행 할 것입니다이 함수를 호출합니다 : 당신은 아무것도를 가져올이 전에 할 필요가있다.

관련 문제