pyinstaller 용량 줄이는 방법 (230MB->36MB)
파이썬을 이용하여 토플 스피킹 연습 프로그램을 만들었는데, 별 기능이 없는데 용량이 230MB나 되었다.
확인해본 결과 아나콘다를 이용하여 pyinstaller를 사용하면 생기는 문제였고, 순정 파이썬을 이용해 230MB에서 36MB까지 줄이게 되었다.
이 글은 어떻게 문제를 해결 했는지 나중에 까먹으면, 내가 다시 볼 겸 정리한 김에 공유한다.
1. 문제 원인 파악 - 네이버 검색 : "pyinstaller 용량"
일단 위의 블로그에서 삽질을 대신 해 주신 덕분에 문제의 원인과 해결방법을 빠르게 찾을 수 있었다.
그런데 원인은 아나콘다와 pyinstaller 호환성의 문제라고 확인했지만, 해결방법인 파이썬 전체를 삭제 후 재설치할 자신이 없어서 뒤로 미뤘다.
그래서 구글링을 더 하며 가상환경도 만들어보는 등, 이것저것 해 봐도 용량이 전혀 줄어들지 않았다.
결국 제자리로 돌아오니, 해결방법은 순정 python을 이용하는 것이었다.
일단 위 블로그와 달리 내 컴퓨터에는 순정 파이썬이 깔려있어서 일단 파이썬을 전체 삭제하지 않고 시도를 해 보았는데 용량은 여전히 컸고, 결국 안쓰던 노트북에 새로 파이썬을 설치해서 해결했다.
그런데 순정버전을 사용하라고 하는데, 처음부터 파이참이나 스파이더같은 프로그램만 써 봐서 파이썬을 어떻게 이용해야 하는지에 대한 설명이 없어서 한참 헤메다가 아래 페이지를 찾았다.
2. 순정파이썬 설치 및 사용방법 - 코딩도장
파이썬을 모두 삭제하기 귀찮아서 아무것도 깔려있지 않은 노트북을 이용했고, 링크의 코딩도장을 참고했다.
순정 파이썬을 설치할 때, 설치경로를 메모장에 복사 해 놓자.(환경변수를 설정할 때 사용한다)
- 설치경로 : C:\users\<username>\AppData\Local\Programs\Python\Python39
파이썬 홈페이지에서 최신버전(현재 3.9)을 다운받은 후, 환경변수를 설정 해 주었다.
자세한 내용은 위 링크를 타고 들어가면 되는데 간단히 요약만 한다.
1) 제어판>시스템 및 보안>시스템>고급 시스템 설정>환경변수(N)
2) <사용자이름>에 대한 사용자변수(U) -> Path -> 편집(E) -> 새로 만들기(N) -> 경로 추가
3) 경로는 2개 추가한다 (파이썬 설치할 때 복사 해 놓은거 사용하면 된다)
- 경로1 : C:\users\....\Python39 <--- 설치경로
- 경로2 : C:\users\....\Python39\Scripts
잘은 모르겠으나, 환경변수를 설정 해 주면 명령 프롬프트(CMD)의 폴더위치가 어디가 되든 파이썬을 사용할 수 있게 해 주는 것 같다.
그래서 경로1이 아마 순정 파이썬 실행을, 경로2가 파이썬에 설치된 모듈(pip, pyinstaller 등등)을 사용할 수 있게 해 주는 설정인 것 같다.
3. pip 및 필요한 모듈 설치
명령 프롬프트(CMD)를 관리자 권한으로 실행한 후, exe파일을 생성할 코드(.py)에 필요한 모듈을 설치 해 준다.
내 코드에서 import 된 모듈은 os, sys, time, winsound, pyttsx3, pyqt5라서 다 설치 해 봤는데, os, sys, time, winsound는 기본 내장이라 설치가 안되어 넘어갔다.
이 때 사용했던 명령어들 대충 정리하고 넘어가겠다.
1) pip list : 순정상태라 모듈은 2개만 설치되어있었고, pip 업그레이드하라는 명령어를 알려주는 것을 확인했다
2) pip install --upgrade pip : 알려준 업그레이드 실행
3) pip install pyinstaller : pyinstaller 설치
4) pip install pyttsx3 : pyttsx3 모듈 설치
5) pip install pyqt5 : pyqt5 모듈 설치
6) pip install os, sys, time, winsound : 혹시몰라 각각 해 봤는데, 내장모듈인지 설치안되더라
4. pyinstaller -> .EXE 파일 생성
pyinstaller를 실행하기 위해 exe파일을 생성할 코드가 있는 위치로 이동했다.
명령 프롬프트에서 이동하는 방법은 대충 아래와 같다
1) 디스크 이동 : "C:", "D:" 후 엔터
2) 해당위치의 폴더, 파일 확인 : dir, dir/b
3) 상위폴더 : cd..
4) 하위폴더 : cd 폴더명
해당하는 폴더로 이동한 후, pyinstaller를 이용하여 exe파일을 생성한다.
프롬프트에 입력 : pyinstaller --clean Beta03.spec
여기서 .py가 아닌 spec을 이용했는데, pyinstaller 사용방법은 아래 링크를 참고했다.
일단 spec 파일은 --onefile, --w같은 다양한 옵션들을 코드로 만들어 적용할 수 있다.
나의 경우는 이 것을 사용하는게 편했는데, 이유는 아래와 같다.
1) 생성방법을 하나하나 지정하는게 귀찮음 : --onefile, --w 등등
2) pyqt5의 designer를 사용함 : .ui 파일을 포함
3) 파일 아이콘을 추가했음 : .ico 파일 포함
4) 파일 로고를 추가했음 : .png 파일 포함
이후에는 spec을 이용하는 방법을 자주 사용할 것 같아서 일단 정리 해 둔다.
1) spec 생성 : pyi -makespec --noconsole --onefile Beta03.py
2) spec 수정 : Beta03.spec을 파이참 혹은 메모장을 이용해서 수정
- 경로 : 그냥 위 블로그 그대로 참고했음. 문제생길 시 다시 방문.
- 파일추가 : datas = [('AA.ui', '.'), ('BB.png', '.')]
- 아이콘 추가, noconsole 등등 옵션은 필요하면 찾아서 하자.
3) pyinstaller 실행 : pyinstaller --clean Beta03.spec
4. 결론
1) pyinstaller의 용량이 과도한 것은 anaconda-pyinstaller 연동문제
2) 순정 파이썬을 이용하면 해결 가능함
3) 순정 파이썬은 환경변수 설정 후, 명령 프롬프트(CMD)를 이용하면 됨
4) pyinstaller는 .spec을 이용하면 다양한 설정이 편리함
끝.
↓↓↓ '♡공감' 버튼 ↓↓↓ 클릭 부탁드립니다