Project/[Python] 도서 정보 입력 프로그램

[도서 입력 프로그램] 8. Pyinstaller exe 파일 배포

CodeNook; 2024. 6. 17. 11:42

[도서 정보 자동 입력 프로그램] 8. Pyinstaller exe 파일 배포

 

 

이제 모든 작업을 마무리하고 마지막으로 py파일을 exe파일로 만들어서 배포작업만 남았다.

파이썬의 단점은 배포가 어렵다는 점이다. 내 컴퓨터에서 잘 실행되는 파이썬 파일을 남의 컴퓨터에서도 실행되게 하려면, 파이썬 패키지부터 모든 라이브러리까지 버전에 맞도록 설치해야만 이상없이 실행된다.

 

다른 컴퓨터에서 일일히 그 복잡한 과정을 진행하는 것은 불필요한 일이라, 간편하게 exe파일로 만들어 배포하게 된다.

문제는 exe파일로 배포하는 과정이 순탄하지 않다는 것. 파이썬의 설계상 약점인지 모르겠는데 exe파일로 만들때마다 오류가 많이 생기고 프로그램이 무거워진다. 어찌되었든 다른 방법보단 그래도 exe파일 배포가 제일 무난하니 이방법을 따를밖에...

 

exe파일 배포에 사용할 라이브러리는 Pyinstaller이다.

설치는 간단하게 콘솔에서 pip install pyinstaller를 입력하면 된다.

 

그후 exe파일로 만드려면 콘솔창에서 pyinstaller 파일이름.py를 입력하면 파일이 만들어진다.

그런데 기본값은 exe파일 하나만 만들어지는것이 아니라 그에 해당하는 백그라운드파일과 폴더까지 같이 만들어져서 번잡해진다. 그래서 콘솔명령어에 --onefile을 붙히면 통합되어 하나의 exe파일로 만들어진다.

 

처음엔 무조건 하나의 파일로 만들어서 간편하게 배포하려했다. 그래서 pyinstaller ---.py --onefile로 실행을 해서 만들어진 exe파일을 실행했더니,

 

콘솔창이 번쩍하고 사라지더니 아무일도 일어나지 않는다.... 😭

 

멘붕인 것이, 기본적으로 모든 코딩의 trobuleshooting은 에러메시지를 확인하고 그에 따른 조치(구글링, ChatGPT)를 하는 것이 최선인데 콘솔창이 바로 사라져버려 에러메시지가 확인조차 되지 않는다... 😭

 

어떻게 해야하나 구글링으로 스택오버플로우 등을 한참 검색해봐도 답이 나오지 않았다.(에러메시지를 모르니...)

결국 방법은 맨땅의 헤딩뿐이다. 이렇게도 해보고 저렇게도 되는대로 다 해보았다..

 

그러다 약간의 실마리를 얻은 시점은, 결국 하나의 exe파일을 포기하고 기본 값으로 pyinstaller를 실행했을때였다.

 

에러메시지가 떴다!

 

 

정확힌 모르겠지만 아마 하나의 exe파일로 만들게 되면 콘솔창 실행 및 종료까지 기본값으로 들어가는것 같다. 분명 콘솔창에 무엇인가 에러메시지가 떴을텐데 기본값으로 종료가 들어가면서 확인할 수 없는 난감한 상황이었는데, --onefile 옵션을 떼고 실행하니 위의 그림처럼 에러메시지가 확인 가능해졌다.

 

문제를 확인해보니 파일 업로드창을 제어하는 Autoit 라이브러리가 확인되지 않는다는 메시지였다.

 

그렇다면 방법은 구글링!

스택오버플로우를 통해 유사한 에러메시지를 뜬 경우를 찾아냈고, 그에 대한 해답을 얻을 수 있었다.

 

해답이 아주 간단했던 것이, Autoit라이브러리 폴더를 그대로 복사 붙혀넣기 해주면 된다.

무슨 이유에선지 Autoit의 경우 Pyinstaller를 실행할때 라이브러리 패키지 파일이 함께 exe파일로 들어가지 않는 문제가 있는 것 같다. 그래서 파이썬 설치 설치폴더에서 Lib > site-packages > autoit 폴더를 복사해서 exe파일이 생성된 dist > _internal 폴더에 그대로 복붙해주면 된다. 모든 troubleshooting이 그렇겠지만, 해결하고나면 허무할정도로 간단하다.

 

스택오버플로우 답글에서는 pyinstaller 실행시에도 명령어를 아래와 같이 하라고 했는데, 폴더 복붙만 잘하면 문제는 없는 것 같긴하다. 그래도 참고차 아래 명령어를 적어둔다.

 

pyinstaller --hidden-import=selenium --hidden-import=auotiit --icon={아이콘 주소} --noconsole {파일이름.py}

 

--icon 옵션은 프로그램의 아이콘 설정하는 옵션인데 설정하려는 아이콘을 ico파일 주소로 넣어주면된다. 그런데 exe파일로 만들고나면 ico파일이 함께 따라가지 않아서 다시 exe파일이 있는 폴더로 ico파일을 복사해줘야한다. 사용자체는 정말 쉬운데 배포는 참 번거로운 이상한 파이썬 언어....

 

그리하여 만들어진 파일 및 폴더를 압축 파일로 배포하면 드디어 모든 프로그래밍 프로젝트 완료!

 

전문가들이 보면 조악한 코딩이겠지만, 코딩이 처음인 입장에서 난생 처음으로 맨땅에 헤딩하듯 부딛혀가며 만들어낸 나의 첫번째 프로그램 프로젝트였다. 아버지께서 만족하며 쓰고 계시니 다행이다.

무엇보다 나에게 코딩의 즐거움을 알게해준 프로젝트였다. 코딩 자체는 딱딱하고 난해하지만 코딩의 본질은 그 자체가 목적이 아닌 도구라는 것. 무엇인가 내가 의도했던 프로그램을 코딩을 수단으로 만드는 과정 자체가 재밌다는 것을 이번 프로젝트를 통해 깨닫게 되었다.

 

예전엔 그저 '프로그래밍 언어를 배워야지'라는 생각으로만 코딩을 접하니 뭐에 쓰는지도 모르겠고 어렵기만 했는데, 목적이을 '내게 필요한 것을 만드는 것'으로 잡고나니 당장 필요하지 않은 문법은 건너 뛰면서 보다 간결하고 집중적으로 코딩을 공부할 수 있어 행복했다.

 

첫번째 프로그래밍을 마치고 어떤 것을 만들어볼까 계속해서 고민중이다. 개인적인 흥미로 머신러닝은 개별로 공부해보고 있고, 가능하다면 머신러닝과 연계해서 웹서비스나 프로그램을 만들어보고 싶다. 가닥이 잡히면 그에 따른 포스팅도 올릴 예정이다.

 

그럼 이만 또다른 프로젝트로~😎

 

이전글: [도서 입력 프로그램] 7. Tkinter GUI 제작

 

[도서 입력 프로그램] 7. Tkinter GUI 제작

[도서 정보 자동 입력 프로그램] 7. Tkinter GUI 제작드디어 길고긴 프로그램 세팅이 끝났고, 이제 이 프로그램을 사용하기 쉽게 작동할 GUI(Graphic User Interface)를 설정할 차례다. 사실 처음에는 GUI까

codenook.site

 

다음글: