Python 상대 가져 오기는 더 이상 권장되지 않지만이 경우 absolute_import를 사용하는 것이 좋습니다.
Guido 자신을 인용 한이 토론을 참조하십시오 .
"이것은 대부분 역사적이지 않습니까? 새로운 상대 가져 오기 구문이 구현되기 전까지는 상대 가져 오기에 여러 가지 문제가있었습니다. 단기 솔루션은 사용하지 않는 것이 좋습니다. 장기적인 솔루션은 명확한 구문을 구현하는 것이 었습니다. 이제는 반 권장을 철회 할 때입니다. 물론, 배 밖으로 나가지 않고-나는 여전히 습득 한 취향을 발견하지만 그 자리가 있습니다. "
OP 는 다음 과 같은 PEP 328 을 올바르게 연결합니다 .
몇 가지 사용 사례가 제시되었으며, 그 중 가장 중요한 것은 하위 패키지를 편집하지 않고도 큰 패키지의 구조를 재정렬 할 수 있다는 것입니다. 또한 패키지 내부의 모듈은 상대적 가져 오기 없이는 쉽게 가져올 수 없습니다.
또한 거의 중복되는 질문을 참조하십시오. 언제 또는 왜 파이썬에서 상대 가져 오기를 사용하는지
물론 그것은 여전히 맛의 문제입니다. 상대적인 가져 오기로 코드를 이동하는 것이 더 쉽지만 예기치 않게 문제가 발생할 수도 있습니다. 수입품의 이름을 바꾸는 것은 그리 어렵지 않습니다.
PEP 328에서 새로운 동작을 강제하려면 다음을 사용하십시오.
from __future__ import absolute_import
이 경우 암시 적 상대 가져 오기가 더 이상 가능하지 않습니다 (예 : import localfile
더 이상 작동하지 않고 from . import localfile
). 깨끗하고 미래의 증명 동작을 위해 absolute_import를 사용하는 것이 좋습니다.
중요한주의 사항은 PEP 338 및 PEP 366 때문에 상대 가져 오기에는 python 파일을 모듈로 가져와야한다는 것 ValueError: Attempted relative import in non-package
입니다. 상대 가져 오기가있는 file.py를 실행할 수 없거나 .
이 제한은 최상의 접근 방식을 평가할 때 고려되어야합니다. Guido는 어떤 경우에도 모듈에서 스크립트 실행에 반대합니다.
나는 이것과 __main__ 기계의 다른 제안 된 트위들 링에 대해 -1입니다. 유일한 유스 케이스는 모듈의 디렉토리 안에있는 스크립트를 실행하는 것 같습니다. 저는 항상 안티 패턴으로 보았습니다. 내가 내 마음을 바꾸게하려면 그렇지 않다고 나를 설득해야합니다.
이 문제에 대한 철저한 토론은 SO에서 찾을 수 있습니다. 레. Python 3는 매우 포괄적입니다.
from _ import ...
, 그래서 당신의 예는 것from .. import A
와from . import B