pyi_rth__tkinter 오류가 뜬금없이 생길 때
멀쩡하게 잘 돌아갔던 프로그램이 몇 차례 개선을 거치고 나서 갑자기 정상적으로 실행이 되지 않을때, 도대체 왜 이런 일이 생기는 것일까 하는 의문을 가질 수 있을 것입니다.
더군다나 Python 스크립트를 통해서 실행하면 정상적으로 실행되는 반면, PyInstaller를 사용해서 생성된 EXE를 실행하면 정상적으로 실행되지 않는 경우를 볼 수 있을 것입니다.
하지만 이전 버전에서는 PyInstaller를 실행해도 잘 돌아갔던 프로그램이 개선된 버전에서 돌아가지 않는다, 하물며 PyInstaller에서는 어떤 옵션도 추가하거나 변경하지 않았다면? PyInstaller 문제라고 보기도 어렵겠죠.
그리고 아래와 같은 메시지가 나타났다면. 이게 도대체 무슨 문제인가 할 수밖에 없을 것입니다.
그렇다면 어디에서 에러를 찾아야 할까요. 다시 소스코드로 돌아갈 수밖에 없겠죠.
Solution
해결책은 의외로 간단했습니다. 소스코드에 아래와 같은 부분이 발견되었으니까요.
네. 갑자기 모듈에 tkinter가 뜬금없이 추가된 것을 확인할 수 있습니다.
도대체 왜 추가가 됐을까요. 그것은 바로..
맨 오른쪽의 ‘E’에 주목할 수밖에 없을 것입니다.
VSCode 또는 다른 IDE를 써서 개발을 진행한다면 자동완성이 되는 경우를 흔하게 겪을 수 있을 것입니다. 그리고 저 ‘E’라는 것은 Exception 처리를 할 때 흔히 쓰는 변수명이겠지요.
이런 형태로 말이죠.
그런데 저것을 막 추가하고 입력하고 하다가 수정하고 하는 과정에 저 ‘E’라는 모듈이 자동으로 추가가 되었을 수 있고, 추가된 위치는 다름아닌 파일의 최상단에 위치하기 때문에 그것을 찾아내기는 힘들 것입니다.
해결책은 간단합니다. 저 사용하지도 않는 tkinter 모듈 import 부분을 지우면 됩니다.
지우고 다시 PyInstaller로 exe를 만들어서 실행해보세요. 정상적으로 될 것입니다.
Good Luck.
Why?
그렇다면 왜 이런 일이 생긴 것일까요?
바로 에러 메시지와 같이 TCL Data Directory가 없다고 하여 에러가 발생했기 때문이겠죠.
솔직히 tkinter가 뭔지 모릅니다. 별로 궁금하지도 않고 사용할 일도 없을 것 같습니다. 다만 한 가지 확실한 것은 그냥 Python 스크립트로 실행하면 정상적으로 되지만, EXE 파일로 생성하려면 모듈도 같이 컴파일을 해야 할 것이고, tkinter 모듈의 경우에는 TCL Data Directory 생성 컴파일까지 같이 해야 하는데 그것이 정상적으로 이루어지지 않았기 때문에 생긴 에러입니다.
그러나 아마도. Python 개발을 하다가 저런 에러가 발생한다면, 확신컨데 아마 90% 이상은 그냥 코딩 중 발생한 오류로 인해서 tkinter 모듈이 뜬금없이 추가되었기 때문에 발생한 에러가 아닐까 싶습니다.
이 점 참고하시고.
import로 불러오는 소스부터 확인하면 좋겠습니다.