본문 바로가기

개발

ModuleNotFoundError 해결하기: 'setuptools.command.test' 문제

728x90

안녕하세요, 최규민입니다. 오늘은 Python 개발 중 자주 마주치는 에러 중 하나인 ModuleNotFoundError: No module named 'setuptools.command.test'에 대해 이야기해보려고 합니다. 이 에러는 특히 오래된 프로젝트를 최신 환경에서 실행하려 할 때 자주 발생하죠. 해결 방법을 GitHub Actions의 예시와 함께 살펴보겠습니다.

에러의 원인

이 에러는 주로 setuptools의 버전 충돌로 인해 발생합니다. setuptools 58.0.0 버전부터 setuptools.command.test 모듈이 제거되었기 때문인데요. 많은 프로젝트들이 아직 이전 버전의 setuptools를 사용하도록 설계되어 있어 이런 문제가 발생합니다.

해결 방법

이 문제를 해결하기 위한 방법은 크게 두 가지입니다:

  1. setuptools의 버전을 58.0.0 미만으로 다운그레이드
  2. 프로젝트 코드를 수정하여 setuptools.command.test 대신 다른 테스트 러너 사용

오늘은 첫 번째 방법, 즉 setuptools를 다운그레이드하는 방법에 대해 자세히 알아보겠습니다.

GitHub Actions에서의 해결 방법

GitHub Actions workflow에서 이 문제를 해결하는 스크립트는 다음과 같습니다:

- name: Upgrade pip
  run: python -m pip install --upgrade pip

- name: Install build dependencies
  run: |
    pip install wheel
    pip install setuptools<58.0.0

- name: Set environment variables
  run: |
    echo "SETUPTOOLS_USE_DISTUTILS=stdlib" >> $GITHUB_ENV

- name: Install dependencies
  run: |
    pip install --no-use-pep517 -r requirements.txt

이 스크립트는 다음과 같은 단계로 문제를 해결합니다:

  1. pip를 최신 버전으로 업그레이드합니다.
  2. wheel을 설치하고, setuptools를 58.0.0 미만 버전으로 설치합니다.
  3. 환경 변수 SETUPTOOLS_USE_DISTUTILSstdlib로 설정합니다.
  4. 프로젝트의 의존성을 설치합니다. 이때 --no-use-pep517 옵션을 사용하여 레거시 설치 방식을 사용합니다.

일반 Python 환경에서의 해결 방법

GitHub Actions가 아닌 일반적인 Python 환경에서도 비슷한 방식으로 문제를 해결할 수 있습니다. 터미널에서 다음 명령어를 실행하세요:

python -m pip install --upgrade pip
pip install wheel
pip install setuptools<58.0.0
export SETUPTOOLS_USE_DISTUTILS=stdlib
pip install --no-use-pep517 -r requirements.txt

이 명령어들은 GitHub Actions 스크립트와 동일한 작업을 수행합니다.

주의사항

이 해결 방법은 임시방편일 수 있습니다. 장기적으로는 프로젝트를 최신 setuptools 버전과 호환되도록 업데이트하는 것이 좋습니다. setuptools.command.test를 사용하는 부분을 찾아 pytest나 unittest 등의 현대적인 테스트 프레임워크로 교체하는 것을 고려해보세요.

마치며

오늘 살펴본 해결 방법이 여러분의 개발 과정에 도움이 되었기를 바랍니다. Python 생태계는 빠르게 변화하고 있어, 이런 종류의 호환성 문제는 앞으로도 계속 마주치게 될 거예요. 하지만 이런 문제들을 해결해 나가는 과정 자체가 우리를 더 나은 개발자로 만들어주는 좋은 경험이 될 거라고 믿습니다.

다음에 또 다른 흥미로운 주제로 찾아뵙겠습니다. 항상 건강하시고 행복한 코딩 되세요!