본문 바로가기
IT, Software/Python

Python PyQt로 윈도우 어플만들기 - pyinstaller 설치, exe파일 생성

by 기타마을이장 2020. 11. 18.

Anaconda 없이 순수 파이선 환경에서 윈도우 프로그램을 만들어보는 작업을 하고 있다.

파이선을 설치하고 PyQt도 설치하고 QT Designer까지 설치했다.

PyCharm을 통해서 코딩을 위한 구성을 완료하고 어플을 만들어본다.

 

이번에 Anaconda 없이 윈도우 프로그램을 만드는 이유는

pyinstaller 실행파일 구동원리 자체가 임시 파이선 실행환경을 만들고, 인터프리터 실행이 가능하게 한 상태에서

파이선 코드내 import 된 모듈과 라이브러리들은 대부분 포함시켜 주다 보니

아주 작은 어플인데도 기본 용량이 몇십 메가 이상인 exe파일이 생성된다.

검색을 해보니 Anaconda에 기본으로 설치되는 라이브러리들이 많아, 순수 파이선 환경보다 exe파일 생성 시용량이 커진다고 한다.

실제로 이번에 만들고 있는 텍스트 분할기는 파이선 파일 3개로 구성된

UI코드를 모두 포함해도 600라인이 조금 안 되는 간단한 어플인데도 54메가 용량의 실행파일이 생성됐다.

pyinstaller 설치하기

이제 마지막으로 코딩된 것을 exe파일로 만들기만 하면 된다.

exe파일을 만들기 위한 spec 파일까지 생성해서 pyinstaller를 실행하려 했지만

역시 Anaconda에서는 기본으로 설치되어있던 pyinstaller가 없다는 에러가 발생한다;;;

설치가 안 돼있으니 pyinstaller를 설치해줬다.

파이선은 pip 라는 훌륭한 설치툴이 있다. 설치방법은 매우 간단해서 어려움 없이 해결했다.

요즘은 웬만한 언어나 OS들이 이런 형태의 설치방법들을 제공하니 참 좋은 것 같다.

pip install pyinstaller

 

터미널 창을 열어서 설치해도 되지만 pycharm내 터미널을 통해서 설치를 진행했다.

설치를 하고 나니 드디어 pyinstaller 실행이 정상적으로 잘 된다.

 

pyinstaller 활용에 대해서는 아래 블로그로 정리해둠.

 

Python PyInstaller spec 파일활용 윈도우 exe 실행파일 만들기

지난 네이버 블로그에서 정리하던 글들을 하나씩 옮겨오는 중이다. 여행기를 옮겨오는 것과 함께 프로그램 관련 포스팅들도 하나씩 옮기고 이어서 추가로 포스팅해보려 한다. 당

fidelislee.tistory.com

win32api attribute 에러 해결하기

pyinstaller가 실행되니 먼가 조만간 결과가 나올 것 같아 기대가 된다.

헛 그런데;;;;;; 한참 진행되다가 error 로그를 만나게 됐다.

AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'error'.

Anaconda가 무겁지만 참 이래저래 편했구나 싶은 생각이 든다ㅠ

이런 에러를 접한 사람들은 이미 전세계에 많이 존재했던 것 같다.

구글링을 해보니 바로 답을 찾을 수 있었다.

원인은 실행파일 생성시 포함시키는 아이콘 파일이 png 형태였기 때문이었다.

이걸 ico 파일로 변경해서 적용하니 바로 해결됐다.

 

AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'error'

(venv) C:\Users\idanf\PycharmProjects\untitled>pyinstaller -w -F -i "C:\Users\idanf\PycharmProjects\untitled\logo.png" gui.py In top have the command that I use to create exe. file from py file...

stackoverflow.com

성공적으로 실행파일을 만들고 나니 예상대로 Anaconda 환경에서 생성한 exe파일보다 조금은 용량이 줄어들었다.

다만 파이선을 실행할 수 있는 기본 환경까지 함께 실행파일에 들어가다 보니 생각했던 거만큼 획기적인 용량 감소는 없었다.

최종 실행파일이 37메가... 여전히 작은 용량은 아니지만 그래도 조금이라도 용량을 줄일 수 있었던 것에 만족해본다.

 

반응형

댓글