안녕하세요.
이번에 시리얼 데이터를 화면에 출력해해 주기 위해서 어떤 GUI 툴을 사용해 볼까 하다가 PyQt5를 테스트해 보았습니다.
PyQt 설치하고 하는 것은 문제가 없었는데, 실행파일을 만들고 배포하기 위해 실행파일을 만들면서 에러가 발생하여 해결한 내용이 있어 조금 도움이 될까 해서 공유드립니다.
1. 개발 환경
참조 사이트를 참고하여 최신 PyQt5 설치
개발 툴은 파이참(PyCham)을 설치하고 아나콘다(Anaconda)도 설치해서 필요한 Library를 가져오는 형태를 취하였습니다.
2. 문제 발생 내용
시리얼 통신 소스를 Run(Ctrl + Shift + F10)으로 실행할 경우 에러 발생하지 않고 실행됨
pyinstaller로 실행파일을 만들어 exe파일 실행 시 Failed to execute script main 에러 발생하고 종료됨
3. 원인 파악
pyinstaller를 실행할 때 옵션으로 -w를 추가해서 에러 창을 볼 수가 없었음
실행되고 바로 종료가 되어서 콘솔 창의 내용 확인할 수 없었음
소스 중 exit() 함수를 찾을 수 없다고 나타나며 에러 발생
4. 해결 방법
초보적인 해결 방법이라 더 좋은 방법이 있으면 공유 부탁드립니다. 그리고 에러 나는 것이 이것뿐만 아니라 다양한 내용으로 에러가 발생할 수 있습니다.
1) pyinstaller에서 -w 옵션 제거해서 콘솔 나타나도록 함
2) 명령어 프롬프트(커멘드 창)에서 실행하여 콘솔 창 내용을 확인
3) exit() 함수 제거
5. 기타 failed to execute script 문제 발생시킬 요인
1) 아이콘 혹은 이미지 경로 문제로 발생하는 경우
2) 라이브러리 미포함
3) spec 파일 설정 등
위와 같은 문제로 인해 failed to execute script 같은 에러가 발생할 수 있고 적지 않는 더 많은 이유로 발생 가능하다고 합니다. 그럴 경우 콘솔 창을 보면서 에러를 확인하고 소스 코드를 대응해야 하지 않을까 합니다.
6. 기 타
pyinstaller를 dev 버전으로 해보라고 하는 내용도 있어 따라 해 봤는데 pyinstaller를 실행해서 실행파일로 만들려 하면 버전이 맞지 않아 실행파일도 만들어지지 않았습니다. 중요한 것은 에러 나오는 것을 확인하고 구글링 등 검색을 해서 해결해 나가야 할 것으로 생각됩니다.
pyinstaller 옵션에 -F는 파일 하나로 만드는 것이고, --uac-admin 은 관리자 권한으로 실행할 수 있도록 옵션(실행 시 관리자 권한 필요하다고 다이얼로그 창 나타남)을 주는 것이었습니다.
감사합니다.
<참고 사이트>
1. PyQt5 소개 및 설치 안내
https://codetorial.net/pyqt5/intro.html
2. PyQt 시리얼 통신 소스
https://github.com/RavenKyu/OpenTutorials_PyQt/blob/master/Projects/DataPort/serial_controler.py
3. Pyinstaller 설치, 사용법, 옵션, 에러 해결
https://noteforstudy.tistory.com/27