반응형
질문
파이썬에서 모듈과 패키지의 차이점은 무엇인가요?
참고: "패키지"와 "모듈"의 차이점은 무엇인가요? (다른 언어에 대해서)
답변
- 어떤 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로 작성된 모듈도 있지만, 질문에서 그런 모듈을 고려하지 않으려고 하셨을 것으로 생각합니다.
반응형
댓글