배움 기록/Programming

[python] (unittest.main) is not callable 에러 해결 (feat. PYTHONPATH, 환경변수)

Spezi 2024. 2. 27. 02:10
반응형

오늘 약간 삽질을 한 것이 있는데, unittest.main 이 not callble이라는 unittest 에러가 나왔다.

코드도 다시 확인하고, 오타가 있는지도 보고, __init__도 다시 확인하고..

 

하지만 `unittest.main`이 호출 가능하지 않은 오류가 발생한 이유는 PYTHONPATH에 "unittest"라는 이름의 디렉터리가 포함되어 있었기 때문이다!!

 

참고로,

  • PYTHONPATH: PYTHONPATH는 Python이 모듈과 패키지를 찾을 때 참조하는 디렉터리 목록을 담고 있는 환경 변수이다. 모듈을 가져올 때 Python은 PYTHONPATH에 나열된 디렉터리에서 검색한다.
  • unittest 모듈: Python에는 유닛 테스트를 작성하고 실행하기 위한 내장 모듈인 `unittest`이 있다. 이 모듈은 모듈 내의 모든 테스트를 실행하기 위해 호출할 수 있는 main() 함수를 제공한다.

 

# my_module.py
import unittest

class MyTest(unittest.TestCase):
    def test_example(self):
        self.assertTrue(True)

if __name__ == '__main__':
    unittest.main()

 

실수로 PYTHONPATH에 "unittest"라는 디렉터리가 있는 경우, 이것이 명명 충돌을 일으키는 것이 원인이다!!

`unittest.main()`을 실행하려고 할 때 Python은 내장된 `unittest` 모듈이 아닌 "unittest"가 포함된 다른 디렉터리에서 `main()` 함수를 호출하려고 한다.

 

예를 들어 나의 경우 PYTHONPATH를 확인해 보니, `TOOLS/pdf/unittest`에 unittest가 포함되어 있는데 이 TOOLS 가 패스에 있어서  문제를 일으키고 있었다.


즉, 이러한 충돌을 피하려면 PYTHONPATH에 표준 Python 모듈이나 패키지와 동일한 이름의 디렉터리가 없도록 확인해야한다. 이 경우 "unittest"가 포함된 디렉터리를 PYTHONPATH에 추가하지 않도록 해야 한다.

PYTHONPATH의 값은 환경변수에 들어가서 볼 수도 있지만, `echo $PYTHONPATH` 를 통해 확인할 수 있다.

 

 

 

 


배움을 기록하기 위한 공간입니다. 

수정이 필요한 내용이나 공유하고 싶은 것이 있다면 언제든 댓글로 남겨주시면 환영입니다 :D

반응형