본문 바로가기
대동단결 Python

pyinstaller 사이즈 최적화

by 즐거운 지니 2022. 4. 16.
반응형

pyinstaller size 문제

pyinstaller는 python 모듈로써 python으로 작성된 스트립트 파일을 직접 실행이 가능한 exe 파일로 변환한다. 이것은 C언어 처럼 소스파일을 컴파일하는 개념이 아니라, python 환경과 사용자가 작성한 스크립트 파일을 묶어 독립적인 실행파일로 변환한 것이다. 겉보기에는 하나의 실행파일 처럼 보이나, 그 파일에는 python 실행환경이 내장되어 있다.

파이썬을 사용하다 보면 다양한 모듈들을 설치하게 되고, 특히 아나콘다처럼 대형 배포판으로 파이썬이 설치되었을 경우 파이썬 실행환경이 매우 많은 파일로 구성되어 비대해진다.

이럴때 pyinstaller로 만들어진 사용자 실행파일은 그 용량이 쓸데없이 커지고 실행시키면 로딩시간이 길어 불편하다.

이 때 실행파일의 용량의 최소로 줄이는 방법에 대해 기술하겠다.

pyinstaller 용량 줄이기 (최적화)

pyinstaller로 파이썬 스크립트를 실행파일(exe)로 만들기 위해서는 보통 터미널 창에서

pyinstaller myPythonFile.py

처럼 pyinstaller를 기동하면 된다.

그런데 pyinstaller는 python 모듈로써 추가적인 설치로 인해 생성된 파이썬 실행환경의 일부이다. pyinstaller가 설치되어 있다면 python.exe가 존재하는 같은 폴더에 위치되어 있다.

pyinstaller를 설치하기 위해서는 pip를 이용하면 된다.

pip install pyinstaller

pyinstaller는 자신이 생성하는 실행파일의 사이즈를 최적화하기위한 내부적 알고리즘은 없는듯 하다.
pyinstaller를 기동하면 자신이 설치되어 있는 python 환경내 모든 모듈들을 포함시킨다. 나의 파이썬 스크립트에서 import되어 있지 않는 모듈도 포함한다. 나의 파이썬 스크립트가 극단적으로 단순한 한 줄의 문장이어도 생성된 실행파일은 모든 파이썬 환경을 포함하고 있다.
pyinstaller는 이에 대한 대책으로 exclude 옶션을 제공하고 유저 스스로 불필요한 모듈들을 제외할 수 있도록 하나, 제외해야할 모듈들이 너무 많은 경우에는 무용지물이다.

차라리, 극단적인 최소한의 파이썬 실행환경과 나의 스크립트 파일에서 import되는 모듈들 만 포함한 최적화된 파이썬 실행환경을 새로 만들어 작업하는 것이 더 효율적이다.

다행히, 파이썬은 가상환경 이라는 개념을 두어 필요에 따라 추가적인 파이썬 실행환경을 만들 수 있다. 이것으로 다음과 같은 절차로 생성파일의 용량을 최소로 줄일 수 있다.

  1. 파이썬 가상환경을 만든다.
  2. 가상환경에 pyinstaller 모듈을 추가한다.
  3. 가상환경에서 자신의 파이썬 스크립트를 작성한다.
  4. 자신의 스크립트에서 요구되는 모듈들은 가상환경에 install한다.
  5. 가상환경에서 자신의 스크립트가 잘 실행되는지 확인한다.
  6. 가상환경에서 pyinstaller를 기동하여 자신의 스크립트를 exe파일로 변환한다.

pyCharm에서 pyinstaller 사용하기

프로젝트생성

파이참에서 가상환경을 사용하기 위해서는 프로젝트 생성 부터 시작해야 한다.

프로젝트 위치 정하기

나의 파이썬 스크립트를 작성할 폴더 또는 이미 존재한다면 그 폴더를 Location으로 지정한다.

파이썬 인터프리터 선택

파이썬 인터프리터를 New environment using Virtualenv 로 선택한다. 이것이 가상환경 만들기의 핵심이다.
이때, location은 기본적으로 프로젝프 폴더내 venv로 설정되도록 두고, Base interpreter는 이미 존재하는 python.exe를 본인이 원하는 버전으로 찾아 선택한다.

나의 경우에서는 python 3.7이 아나콘다 배폰판에 의해 깔려져 있고, python 3.10이 순수 python으로 깔아 두었다. 파이참은 시스템 안에 설치되어 있는 여러 파이썬 버전들을 찾아 제시해 주고 유저로 하여금 선택할 수 있도록 되어 있다.

create 버튼을 눌러 진행한다.

가상환경에 pyinstaller 설치

파이참 화면 하단에 Terminal탭을 클릭하여 터미널 창을 열어보면 가상환경이 기동되었는지 확인할 수 있다. 프롬프트의 시작이 그림과 같이 (venv) 로 시작한다면 가상환경이 기동된 것이다.

이제 가상환경 프롬프트에서 pip를 이용하여 pyinstaller를 설치한다. 만일 pyinstaller를 가상환경 내에 새로 설치하지 않은채 pyinstaller를 기동한다면 다른 파이썬 실행환경내 pyinstaller가 기동 될 수 있다. 그렇다면 나의 수고와 상관없이 그 파이썬 실행환경내 모든 모듈들이 불려지게 되는 불상사를 불러온다.


이것으로 핵심적인 내용은 완료되었다. 나머지 절차는 중요하지 않다. 파이참 내에서는 스크립트를 실행하거나 터미널을 열거나, 프롬프트창을 열어도 가상환경을 항상 끼고 있다. 다만 내 스크립트에 필요한 모듈들은 pyinstaller 처럼 가상환경에 꼭 설치해야 한다. 종종 설치하지 않아도 실행되는 모듈들도 있는데 이는 다른 파이썬환경에서 불려진 것이니 알 수 없는 이상한 증상은 여기서 기인한다.

  • 가상환경을 만드는 것
  • 가상환경내 pyinstaller를 설치
  • 가상환경에서 실행

가상환경 실행하기 (프롬프트에서 가상환경 진입)

파이참이 아닌 운영체제 프롬프트 상에서 파이썬 가상환경을 실행(Activate) 하기 위해서는 activate.bat 파일을 실행하면 된다.

가상환경은 내 프로젝트 폴더 내 venv 서브폴더 안에 존재한다. activate.bat는 venv\Scripts 에 있으며 일단 activate.bat를 실행한 다음에는 프롬프트가 (vene) 로 바뀌고 환경변수의 PATH가 가상환경폴더로 지정되므로 이후 파이썬을 호출하면 가상환경의 파이썬이 호출된다.


반응형

댓글