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

파이썬 패키지란 무엇일까? 모듈과의 차이까지 완벽 정리

파이썬 패키지(Package)의 개념

파이썬에서 패키지(package)를 제대로 이해하려면 먼저 모듈(module)에 대한 개념을 알아야 합니다. 파이썬에서는 모든 .py 파일이 하나의 모듈이며, 모듈의 이름은 파일 확장자(.py)를 제외한 파일명, 즉 해당 모듈의 __name__ 속성과 같습니다.

그렇다면 패키지는 무엇일까요? 패키지는 여러 파이썬 모듈을 모아놓은 집합체입니다. 좀 더 구체적으로 말하면, 파이썬 모듈들이 들어 있는 디렉터리(폴더)에 추가로 __init__.py 파일이 포함된 것을 패키지라고 부릅니다.

__init__.py 파일의 역할

__init__.py 파일은 단순히 파이썬 스크립트가 여러 개 들어 있는 일반 디렉터리와 패키지를 구분해 주는 중요한 역할을 합니다. 이 파일이 존재해야 해당 디렉터리가 파이썬이 인식하는 패키지가 됩니다.

또한 패키지는 하위 패키지를 포함할 수 있으며, 각 하위 디렉터리마다 자신만의 __init__.py 파일을 가지고 있다면 원하는 만큼 깊게 중첩(nesting)하는 것도 가능합니다.

모듈과 패키지의 차이점

흥미로운 점은, 모듈이든 패키지든 임포트(import)했을 때 파이썬이 생성하는 객체는 항상 module 타입이라는 사실입니다. 즉, 모듈과 패키지의 구분은 오직 파일 시스템 수준에서만 존재합니다.

다만 주의할 점이 있습니다. 패키지를 임포트하면 그 패키지의 __init__.py 파일 안에 정의된 변수, 함수, 클래스만 직접 사용할 수 있습니다. 하위 패키지나 하위 모듈까지 자동으로 불러와지지 않기 때문입니다.

예제로 확인하는 서브모듈 임포트

예를 들어, datetime 패키지에는 date라는 서브모듈이 있습니다. 패키지 전체를 임포트한다고 해서 이 서브모듈까지 함께 불러와지지는 않으며, 별도로 임포트해야 합니다.

>>> import datetime
>>> date.today()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'date' is not defined
>>> from datetime import date
>>> date.today()
datetime.date(2017, 9, 1)

위 예제에서 볼 수 있듯이, import datetime만 실행한 상태에서는 date 객체에 접근할 수 없어 NameError가 발생합니다. 반면 from datetime import date처럼 명시적으로 임포트하면 date.today() 메서드를 정상적으로 사용할 수 있습니다.

정리

  • 모듈: 개별 파이썬 파일(.py)
  • 패키지: __init__.py 파일을 포함한 모듈들의 디렉터리
  • 패키지를 임포트해도 하위 모듈은 자동으로 로드되지 않으므로 필요한 모듈은 따로 임포트해야 함