본문 바로가기
Python/Python FAQ

Python 파이썬에서 모듈과 패키지의 차이점은 무엇인가요?, What's the difference between a module and package in Python?

by 베타코드 2023. 7. 3.
반응형

질문


파이썬에서 모듈과 패키지의 차이점은 무엇인가요?

참고: "패키지"와 "모듈"의 차이점은 무엇인가요? (다른 언어에 대해서)


답변


  • 어떤 Python 파일은 모듈이며, 파일의 기본 이름인 .py 확장자를 제외한 것입니다.
  • 패키지는 Python 모듈의 모음입니다. 모듈은 단일 Python 파일이지만, 패키지는 Python 모듈의 디렉터리로, 추가적인 __init__.py 파일을 포함하고 있습니다. 이를 통해 패키지를 단순히 Python 스크립트의 모음을 포함하는 디렉터리와 구분할 수 있습니다. 패키지는 해당 디렉터리가 자체적인 __init__.py 파일을 포함하는 한 어떤 깊이로든 중첩될 수 있습니다.

모듈패키지 사이의 구분은 파일 시스템 수준에서만 유지되는 것으로 보입니다. 모듈이나 패키지를 가져올 때, Python에 의해 생성된 해당 객체는 항상 module 유형입니다. 그러나 패키지를 가져올 때는 __init__.py 파일에 있는 변수/함수/클래스만 직접적으로 보이며, 하위 패키지모듈은 보이지 않습니다.


예제

예를 들어, Python 표준 라이브러리의 xml 패키지를 살펴보겠습니다. 해당 xml 디렉터리에는 __init__.py 파일과 네 개의 하위 디렉터리가 있습니다. 그 중 etree 하위 디렉터리에는 __init__.py 파일과, 다른 파일들 중에서도 ElementTree.py 파일이 있습니다.

패키지/모듈을 대화식으로 가져올 때 무슨 일이 일어나는지 살펴보세요:

>>> import xml
>>> type(xml)
<type 'module'>
>>> xml.etree.ElementTree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'etree'
>>>
>>>
>>> import xml.etree
>>> type(xml.etree)
<type 'module'>
>>> xml.etree.ElementTree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'ElementTree'
>>>
>>>
>>> import xml.etree.ElementTree
>>> type(xml.etree.ElementTree)
<type 'module'>
>>> xml.etree.ElementTree.parse
<function parse at 0x00B135B0>

참고

Python에서는 내장 모듈인 sys와 같은 C로 작성된 모듈도 있지만, 질문에서 그런 모듈을 고려하지 않으려고 하셨을 것으로 생각합니다.

반응형

댓글