본문 바로가기
목차
Python

[Py] importlib.metadata: Package 정보 확인

by ds31x 2025. 4. 23.
728x90
반응형

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

 

728x90

'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