상황 설명은 필요 없고 빠른 해결을 원하신다면 빨간 글자를 따라가주세요!
상황.
pyqt를 이용해 인터페이스의 구성과 기능을 정의했으며, 그 기능들 중에는 yolo v8 모델의 predict 메서드를 활용하는 것이 있다.
실제로 실행시킬 main.py는 별개로 작성했으며, 여기서는 위에서 만들어진 인터페이스 py 내의 클래스를 임포트한다.
나는 이 main.py를 exe로 만드려 한다.
우선 새로운 폴더에 프로그램 구동에 필요한 모든 파일 (인터페이스 py 파일, main.py, yolo v8 모델의 pt 파일 정도?) 들을 넣어놓고,
이 폴더 위치에서 터미널을 열어 아래와 같이 실행하였다.
pyinstaller -w -F main.py
이를 통해 생성된 작업폴더 > dist > exe 파일을 실행해보았다.
오류 01.
다음과 같은 오류 메시지가 떴다.
맨 마지막 줄을 보면, FileNotFoundError가 떴다.
에러 메시지 안의
importlib의 _bootstrap.py,
ultralytics/utils의 여러 .py들의
해당하는 line에 호출된 함수들을 전부 구경하였다.
마지막에 도착한 함수는 그냥 결국 yaml 파일을 열어보는? 함수였다.
그냥, 이 함수는, 위 파일을 못찾겠다고 했을 뿐이다.
해결 01.
아래와 같이 입력하여 새롭게 exe를 만든다.
pyinstaller --collect-data ultralytics --onefile main.py
내 생각엔,
저 오류 메시지에서, 못찾겠다는 그 path에서
어쩌구저쩌구.. 하다가 MEI 어쩌구가 나오고
그 바로 다음에 나오는, 나의 경우는 "ultralytics"를,
--collect-data 뒤에 입력해야 하는 것 같다.
이제 다시 exe를 실행해 본다.
오류 02.
이번에도 또 FileNotFoundError가 떴다.
(근데 이번 오류에 있는 path는 위처럼 복잡한 path가 아니고, 그냥 내가 main.py 상에서 상대경로를 통해 갖다쓴 파일 경로임.)
(위와 다르게 에러 메시지가 콘솔창에 뜨는 이유: 단지 이번에는 내가 "-w" 옵션을 추가하지 않아서임.)
(그리고, 이러한 오류창은 떴다가 바로 사라진다.
이를 해결하려면 커맨드창에서 실행하여 창 내에 에러 메시지가 써있도록 하라는데,
나에겐 그조차 일이라서, 그냥 빠르게 캡쳐했다.ㅋㅋ)
해결 02.
main.py가 아니라 main.spec에서,
4번 줄처럼, 아까 위에서 못찾겠다는 그 파일을 튜플 형태로 추가해준다.
만약 오류 상에서 없다는 파일 path 가 'aaa\\bbb.hwakjangja' 라면 다음과 같이 해줘야 한다:
('./aaa/bbb.hwakjangja', './aaa')
그런 다음, 다시 터미널에 아래와 같이 입력해준다.
pyinstaller main.spec
그리고 주황색 줄 친 collect_data_files가 아까 내가 터미널에서 명령어로 친 --collect-data 가 적용된 것이 아닌가 싶다!
이제 다시 exe를 실행해 본다.
오류 03.
여전히 위와 같은 오류가 똑같이 떴다.
경로 인식의 문제인 것 같다.
해결 03.
main.py의 맨 위에 아래와 같이 입력해준다.
그런 다음 다시 터미널에 아래와 같이 입력해준다.
pyinstaller main.spec
이제 다시 exe를 실행해 본다.
오류 04.
그랬더니 인터페이스 창 뜨기까지 되었다.
그런데 웹캠을 켜는 버튼을 누르면, 갑자기 똑같은 창이 하나 더 생긴다.
이때 어찌저찌 하면 제 기능을 활용을 할 수는 있으나, 여튼 올바른 상황은 아니다.
해결 04.
main.py의 윗부분에 아래와 같이 입력해준다.
다시 터미널에 아래와 같이 입력해준다.
pyinstaller main.spec
이제 exe 파일을 실행해본다.
그러면 인터페이스 창이 정상적으로 하나만 뜨며, 이외의 모든 기능도 잘 작동된다.
출처: https://stackoverflow.com/questions/73674500/pyqt-app-built-with-pyinstaller-duplicating-window
'IT > DevOps' 카테고리의 다른 글
[Docker] Application 공유하기: Docker registry, Docker Hub (0) | 2024.02.05 |
---|---|
[Docker] Application 업데이트하기 (2) | 2024.02.05 |
[Docker] Overview, Application containerize하기 (0) | 2024.02.04 |
Docker, Kubernetes (0) | 2023.05.05 |
3tier 아키텍쳐 (0) | 2023.04.30 |