
importlib.metadata 모듈
설치된 패키지의 메타데이터에 접근할 수 있는 기능을 제공
Python 3.8부터 표준 라이브러리에 포함됨.
이 모듈은 기존에 많이 사용되던 pkg_resources의 일부 기능을 대체하고 있음.
1. 주요 특징
- Python 3.8 이상의 표준 라이브러리로 포함됨
- PEP 566에 정의된 메타데이터 표준 지원
- 설치된 Package 의 다음 속성에 접근 가능함.
- version
- 의존성(requires)
- 진입점(entry points)
- 기존의
pkg_resources보다 더 빠르고 가벼움
2. 기본 기능
2-1. 패키지 version 확인 ***
import importlib.metadata
version = importlib.metadata.version('패키지명')
해당 버전을 분석하려면 packaging.version 이용.
2024.09.19 - [Python] - [Etc] SW Version: Semantic Versioning + packaging.version
[Etc] SW Version: Semantic Versioning + packaging.version
1. Semantic Versioning SystemSemantic Versioning (SemVer) 시스템에 따라,소프트웨어에서 major와 minor, patch (or micro) 버전을 구분하여 버전을 매김.Python에서는 PEP 440 에서 버전 표기 방식을 지정하고 있으며 SemVe
ds31x.tistory.com
2-2. 패키지 메타데이터 접근 *
metadata = importlib.metadata.metadata('패키지명')
# metadata는 Python의 표준 라이브러리 중
# `email.message` 모듈의 `Message` 클래스 객체를 반환함.
# 이는 dict 객체처럼 사용 가능 (key 값이 대소문자 구분하지 않는 특징)
print(metadata['Author'])
print(metadata['Summary'])
2-3. 설치된 모든 패키지 조회 ***
distributions = list(importlib.metadata.distributions())
for dist in distributions:
print(f"{dist.metadata['Name']} {dist.version}")
2-4.진입점(Entry Points) 접근
# 특정 그룹의 진입점 가져오기
entry_points = importlib.metadata.entry_points(group='console_scripts')
for ep in entry_points:
# ep.name : 콘솔에서 실행하는 명령어.
# e.value : 해당 명령어에 의해 실제 실행되는 python 함수.
print(f"{ep.name} = {ep.value}")
entry point는 파이썬 패키지가
외부에 노출하는 인터페이스 포인트를 가리킴.
entry point는 그룹으로 나뉘어 관리되며 대표적인 그룹으로는 다음과 같음
console_scripts: 패키지 설치 시 생성되는 명령줄 script.gui_scripts: GUI App 실행 script- 특정 framework용 그룹:
pytest11또는flask.commands등등.
pip에서 제공하는 entry point는 다음과 같음:
pip = pip._internal.cli.main:main
- 이는
pip명령어를 실행하면 pip._internal.cli.main모듈의main함수가 호출됨을 의미함.
entry point는 setup.py 에서 설정하며 대략적인 예는 다음과 같음:
# setup.py
setup(
name="my_package",
# ...
entry_points={
'console_scripts': [
'my-command=my_package.cli:main',
],
'my_framework.plugins': [
'plugin1=my_package.plugins:Plugin1',
]
}
)
importlib.metadata.entry_points(group='my_framework.plugins')로 위의 예에서 설정한 entry point를 확인 가능함.
2-5. 패키지 파일 목록 확인 *
files = importlib.metadata.files('패키지명')
for file in files:
print(file)
2-6. 패키지 요구사항(의존성) 확인
requires = importlib.metadata.requires('패키지명')
for req in requires:
print(req)
3. 결론
importlib.metadata는
- 파이썬 패키지의 메타데이터에 접근하기 위한 간결하고 효율적인 API를 제공하며,
- 특히 설치된 패키지 관리와 검사에 유용.
- 파이썬 3.8 미만 버전에서는
importlib_metadata백포트 패키지를 설치하여 동일한 기능을 사용 가능.
참고: 백포트 패키지(backport package)
Backport package는 최신 버전의 프로그래밍 언어나 프레임워크에서 도입된 기능을 이전 버전에서도 사용할 수 있도록 만든 라이브러리를 가리킴.
# Python 3.8 미만에서 importlib.metadata 기능 사용하기
try:
# 먼저 표준 라이브러리에서 가져오기 시도
import importlib.metadata as metadata
except ImportError:
# 실패하면 백포트 패키지 사용
import importlib_metadata as metadata
# 이제 어떤 Python 버전에서든 동일하게 사용 가능
version = metadata.version('some_package')
같이 보면 좋은 자료들
2024.02.03 - [Python] - [Python] Module, Package and Library (+ Framework)
[Python] Module, Package and Library (+ Framework)
필요한 개념 및 용어 정리Library and Frameworkhttps://dsaint31.tistory.com/452 [Programming] Library vs. Framework이 둘을 명확히 구분하는 정의는 사실 없다고 봐야한다. 개인적으로 호출 시점과 같은 흐름에 대한
ds31x.tistory.com
'Python' 카테고리의 다른 글
| [Programming] SOLID 원칙 (0) | 2025.04.28 |
|---|---|
| [DL] default collate_fn - PyTorch (0) | 2025.04.26 |
| [Programming] Control Flow 와 Control Structure (1) | 2025.04.23 |
| [Py] import 의 종류. (0) | 2025.04.18 |
| [DL] PyTorch-Hook (0) | 2025.04.10 |