오늘 약간 삽질을 한 것이 있는데, 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
'배움 기록 > Programming' 카테고리의 다른 글
C++ 인터뷰 준비하기 - 1. Basic Concepts (2) | 2024.12.25 |
---|---|
[Github actions] CI 구축하기 (feat. workflow yaml파일) (2) | 2024.03.01 |
[python, dataclass] 데이터 클래스의 장점 (0) | 2024.02.26 |
csv파일을 엑셀에서 세미콜론으로 분리해서 보기 (데이터 변형 없이!) (1) | 2024.01.11 |
GitHub Copilot이란? 학생 무료 계정 사용법 !! (0) | 2023.09.27 |