Skip to main content

파이썬 라이브러리에서 Deprecation 경고가 작동하지 않는 이유와 해결 방법

Published 4 min readMarkdown

SEO 키워드: Python 경고, Deprecation, 라이브러리 업데이트


# 서론 – “왜 DeprecationWarning 은 보이지 않을까?”

파이썬을 사용하면서 DeprecationWarning 이라는 메시지를 본 적이 있나요?

이 경고는 “해당 함수·클래스는 곧 사라질 예정이니 새로운 API로 옮겨라” 라는 뜻을 담고 있어, 라이브러리 개발자와 사용자 모두에게 중요한 정보를 제공합니다.

그런데 실제 프로젝트에서는 경고가 화면에 전혀 나타나지 않아 오래된 코드를 그대로 사용하게 되는 경우가 많습니다. 레딧의 토론 “Deprecation via warnings don’t work for Python libraries” 은 바로 이 현상을 짚어보며, 왜 파이썬 경고가 무시되는지, 그리고 초보자도 바로 적용할 수 있는 해결책을 제시합니다.

이 글에서는 파이썬 경고가 보이지 않는 대표적인 원인 3가지와, 환경 설정·코드 수정·CI 파이프라인에 적용할 수 있는 구체적인 방법을 단계별로 정리합니다.


# 1️⃣ Deprecation 경고가 기본적으로 숨겨지는 이유

파이썬 인터프리터는 DeprecationWarning 을 기본 설정(-W default)에서 표시하지 않도록 설계되었습니다. 이는 개발 단계가 아닌 일반 사용자에게 불필요한 경고를 보여주지 않기 위한 선택이었지만, 라이브러리 개발자 입장에서는 버전 업그레이드 시점에 중요한 신호가 사라지는 단점이 있습니다.

bash

# 기본 실행 – DeprecationWarning 은 보이지 않음

python my_script.py

따라서 경고를 눈에 보이게 하려면 명시적으로 옵션을 바꿔야 합니다.


# 2️⃣ 경고가 보이지 않는 주요 상황 3가지

| 상황 | 설명 | 발생하는 문제 |

|------|------|--------------|

| ① 인터프리터 옵션 미설정 | -W default 혹은 -Wd 옵션을 주지 않음 | 모든 DeprecationWarning 은 무시 |

| ② 라이브러리 내부에서 경고 억제 | warnings.filterwarnings('ignore') 혹은 simplefilter('ignore') 를 호출 | 라이브러리 자체가 경고를 숨김 |

| ③ 테스트·CI 환경에서 경고가 캡처 | pytest -q 등은 경고를 출력하지 않음 | CI 로그에 경고가 나타나지 않아 업데이트를 놓침 |

이 세 가지가 겹치면 “Deprecation via warnings don’t work” 라는 현상이 그대로 재현됩니다.


# 3️⃣ 초보자를 위한 경고 활성화 방법

# 3‑1. 커맨드 라인에서 옵션 지정

bash

# 모든 경고를 표시

python -Wd my_script.py

# 기본 수준(Warning, Deprecation 등)만 표시

python -Wdefault my_script.py

Tip: -Werror 옵션을 사용하면 경고를 예외 로 전환할 수 있어, 테스트 단계에서 바로 실패하도록 만들 수 있습니다.

# 3‑2. 코드 레벨에서 필터링 설정

python

import warnings

# DeprecationWarning 을 항상 표시

warnings.filterwarnings('default', category=DeprecationWarning)

# 특정 모듈에만 적용하고 싶다면

warnings.filterwarnings('default', module='my_lib.*')

이 코드를 프로젝트의 진입점(__main__ 혹은 settings.py) 에 넣으면, 실행 시점부터 모든 Deprecation 경고가 콘솔에 출력됩니다.

# 3‑3. pytest·unittest 에서 경고 확인

# pytest

bash

# -ra 옵션은 실패·스킵·경고를 모두 요약해 보여줍니다

pytest -ra

# -W default 로 경고를 기본 수준으로 출력

pytest -W default

conftest.py 에 아래 코드를 추가하면 모든 테스트에 자동 적용됩니다.

python

def pytest_configure(config):

    import warnings

    warnings.filterwarnings('default', category=DeprecationWarning)

# unittest

python

import unittest

import warnings

class MyTest(unittest.TestCase):

    @classmethod

    def setUpClass(cls):

        warnings.filterwarnings('default', category=DeprecationWarning)

# 3‑4. 라이브러리 개발자가 지켜야 할 베스트 프랙티스

  1. warnings.warn 사용 – DeprecationWarning 을 명시적으로 지정한다.
python

   import warnings

   warnings.warn(

       'old_func() is deprecated, use new_func() instead',

       DeprecationWarning,

       stacklevel=2

   )
  1. 문서에 명시 – CHANGELOG 와 README 에 deprecation 일정과 대체 API 를 기록한다.

  2. 버전 정책 – 최소 2개의 마이너 버전 동안 경고를 유지하고, 그 이후에 제거한다.


# 4️⃣ 실제 사례 – 레딧 토론에서 언급된 라이브러리 3가지

| 라이브러리 | 문제점 | 해결 후 효과 |

|-----------|--------|--------------|

| NumPy | np.asscalar 가 deprecated 되었지만, 기본 설정에서는 경고가 안 보임 | python -Wd 로 실행하면 경고가 표시돼, 사용자들이 np.ndarray.item() 으로 전환 |

| Pandas | DataFrame.append 가 deprecated 되었으나, 내부에서 warnings.filterwarnings('ignore') 로 억제 | 프로젝트 전역에 warnings.filterwarnings('default') 를 추가해 경고가 나타나고, 코드 리팩터링이 진행 |

| Requests | urllib3 경고가 라이브러리 내부에서 억제돼, 보안 업데이트를 놓침 | pip install -U requests 후 -Wdefault 옵션을 적용하면 최신 보안 패치를 바로 확인 가능 |

이 사례들은 경고가 숨겨진 채 배포될 경우, 사용자는 오래된 API를 계속 사용하게 되고, 결국 버그·보안 위험에 노출된다는 점을 명확히 보여줍니다.


# 5️⃣ 체크리스트 – 지금 바로 적용해 보세요

| 체크 항목 | 완료 여부 |

|----------|-----------|

| warnings.filterwarnings('default', category=DeprecationWarning) 를 프로젝트 진입점에 추가 | ☐ |

| CI 파이프라인에 -Werror 혹은 -Wdefault 옵션을 적용 | ☐ |

| CHANGELOG 에 deprecation 일정과 대체 API 를 기록 | ☐ |

| 주요 라이브러리(NumPy, Pandas 등)의 최신 버전 사용 여부 확인 | ☐ |

| 테스트 프레임워크(pytest, unittest)에서 경고가 출력되는지 확인 | ☐ |


# 결론 – “Deprecation 경고를 무시하지 말자”

파이썬 경고는 버전 호환성과 보안 유지에 필수적인 신호입니다. 하지만 기본 설정이 경고를 숨기고, 일부 라이브러리가 의도적으로 억제하기 때문에 “Deprecation via warnings don’t work” 라는 문제가 발생합니다.

위에서 소개한 커맨드 라인 옵션, 코드 레벨 필터링, 테스트·CI 설정을 적용하면 어느 환경에서도 경고를 눈에 띄게 만들 수 있습니다.

행동 유도

  1. 현재 작업 중인 파이썬 프로젝트에 warnings.filterwarnings('default', category=DeprecationWarning) 를 삽입하고, 스크립트를 다시 실행해 보세요.

  2. CI 파이프라인에 -Werror 옵션을 추가해 경고가 발생하면 빌드가 바로 실패하도록 설정합니다.

  3. 사용 중인 주요 라이브러리의 CHANGELOG 를 확인하고, deprecation 일정에 맞춰 코드를 리팩터링하세요.

이제 Deprecation 경고를 놓치지 않고, 안전하고 지속 가능한 파이썬 코드를 작성할 준비가 되었습니다. 오늘 바로 적용해 보세요! 🚀

No comments yet. Be the first to comment.

More from this blog