Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 패키지에서 모든 모듈을 한 번에 임포트하는 방법

파이썬 패키지 전체를 임포트하는 것이 권장되지 않는 이유

파이썬 패키지에서 모든 것을 한꺼번에 임포트하는 것은 좋지 않은 습관입니다. 패키지는 하나의 거대한 '슈퍼 모듈'이 아니라, 관련 있는 여러 모듈을 묶어 둔 단순한 집합체이기 때문입니다. 따라서 각 파일에는 그 시점에 실제로 필요한 항목만 임포트하는 것이 올바른 접근 방식입니다.

게다가 패키지의 모든 내용을 전역 네임스페이스로 끌어오면 정의되는 이름의 수가 급격히 늘어나고, 서로 다른 모듈에서 같은 이름을 사용하는 경우 충돌이 발생할 가능성도 커집니다. 코드 가독성과 유지보수 측면에서도 어떤 이름이 어디에서 왔는지 추적하기 어려워지므로 주의가 필요합니다.

그래도 패키지 전체를 임포트해야 한다면

이런 경고에도 불구하고 상황에 따라서는 패키지 전체를 한 번에 임포트해야 할 때가 있습니다. 이때 활용할 수 있는 대표적인 방법은 두 가지입니다.

방법 1: 서브 모듈을 하나씩 직접 임포트

가장 기본적인 방법은 패키지에 포함된 모든 서브 모듈을 import 문으로 직접 나열하는 것입니다.

from mypackage import module_a
from mypackage import module_b
from mypackage.subpackage import submodule_c

방법 2: __init__.py의 __all__ 리스트 활용

두 번째 방법은 공식 문서(docs.python.org/tutorial/modules.html)에서도 설명하는 방식으로, 패키지의 __init__.py 파일에 문자열 리스트 형태의 __all__ 변수를 정의하는 것입니다. 이렇게 하면 from pack import * 구문을 실행할 때 __all__에 등록된 모든 모듈과 서브 패키지가 함께 임포트됩니다.

예를 들어 __init__.py에 아래와 같이 작성합니다.

__all__ = ["module_a", "module_b", "submodule_c"]

그다음 원하는 모듈에서 from packageName import * 구문을 사용하면 패키지에 포함된 모든 요소가 한꺼번에 불러와집니다. 이후 이 모듈을 다른 곳에서 임포트하면, 앞서 임포트했던 모든 이름들도 해당 네임스페이스에 함께 포함됩니다.

정리

패키지 전체 임포트는 기술적으로 가능하지만, 네임스페이스 오염과 이름 충돌 위험이 있기 때문에 필요한 항목만 선택적으로 임포트하는 것이 가장 안전하고 권장되는 방법입니다. 부득이하게 전체 임포트가 필요하다면 __all__ 리스트를 명확하게 관리하는 것이 좋습니다.