작성
·
84
답변 2
0
안녕하세요, sakuraibbo님! PyInstaller로 만든 실행 파일의 용량과 실행 속도에 대해 질문 주셨네요. 몇몇 분들이 처음 겪고 놀라시는 부분이기도 한데, 결론부터 말씀드리면 뭔가 잘못된 것은 아닐 가능성이 높습니다.
PyInstaller은 작성하신 몇 줄의 코드만 쏙 담아서 실행 파일을 만드는 것이 아니라, 그 코드를 실행하는 데 필요한 모든 환경을 함께 패키징하기 때문입니다.
파이썬 인터프리터 포함: 우리가 작성한 파이썬 코드(.py
)는 사실 그냥 텍스트 파일입니다. 이 코드를 컴퓨터가 알아들을 수 있는 언어로 번역하고 실행해주는 '파이썬 실행 환경(Interpreter)'이 반드시 필요한데, PyInstaller는 이 파이썬 자체를 실행 파일 안에 통째로 집어넣습니다. 이것만으로도 수십 MB의 용량을 차지합니다.
사용한 라이브러리 모두 포함: 코드에서 import pandas
같은 라이브러리를 사용했다면, 해당 라이브러리의 전체 또는 대부분의 기능이 실행 파일에 포함됩니다. "나는 판다스에서 데이터프레임 만드는 기능 하나만 썼는데?"라고 해도, PyInstaller는 나중에 어떤 기능이 더 필요할지 모르니 일단 라이브러리 전체를 챙겨서 넣는 경향이 있습니다. 특히 데이터 분석이나 GUI 관련 라이브러리들은 자체 용량이 매우 큽니다.
숨겨진 의존성 포함: 우리가 직접 import
하지 않았더라도, 사용한 라이브러리가 내부적으로 사용하는 다른 라이브러리들까지 모두 찾아서 포함시킵니다.
따라서 코드 길이는 짧아도, 어떤 라이브러리를 사용했느냐에 따라 실행 파일의 용량은 98MB는 물론, 수백 MB까지도 커질 수 있습니다.
특히 pyinstaller --onefile
옵션으로 하나의 파일로 만드셨을 경우, 실행 속도가 느리게 느껴지는 것이 일반적입니다.
그 이유는 실행 파일을 더블클릭했을 때, 컴퓨터가 내부적으로 다음과 같은 과정을 거치기 때문입니다.
압축된 파일(파이썬 인터프리터, 라이브러리 등)을 임시 폴더에 모두 해제(압축 풀기)합니다.
압축이 풀린 파일들을 기반으로 파이썬 환경을 구성합니다.
비로소 우리가 작성한 코드를 실행합니다.
이 '압축 해제' 과정 때문에 첫 실행 시 약간의 딜레이가 발생하는 것입니다. 컴퓨터 사양에 따라서 이 시간이 더 길게 느껴질 수도 있습니다.
그럼에도 불구하고 용량을 줄이고 실행 속도를 개선할 수 있는 몇 가지 좋은 방법들이 있습니다. 다음 방법들을 시도해 보시는 것을 강력히 추천합니다.
현재 PC에 설치된 모든 파이썬 라이브러리가 실행 파일에 포함되었을 수 있습니다. 이걸 방지하기 위해, 프로젝트에 딱 필요한 라이브러리만 들어있는 깨끗한 작업 공간, 즉 '가상 환경(Virtual Environment)'을 만들어 사용하는 것이 가장 효과적입니다.
프로젝트 폴더에서 터미널(명령 프롬프트)을 엽니다.
아래 명령어로 myenv
라는 이름의 가상 환경을 만듭니다.
python -m venv myenv
가상 환경을 활성화합니다.
Windows:myenv\Scripts\activate
macOS/Linux:source myenv/bin/activate
(터미널 맨 앞에 (myenv)
가 표시되면 성공입니다.)
이 상태에서 프로젝트에 꼭 필요한 라이브러리만 다시 설치합니다.
Bash
pip install pandas numpy # 예시: 필요한 라이브러리만 설치
pip install pyinstaller
이제 가상 환경이 활성화된 터미널에서 PyInstaller 빌드 명령을 다시 실행해 보세요.
UPX 압축 사용하기: UPX라는 실행 파일 압축 프로그램을 사용하면 용량을 추가로 50~70%까지 줄일 수 있습니다.
UPX 홈페이지에서 자신의 OS에 맞는 파일을 다운로드하고, PyInstaller가 찾을 수 있는 경로에 압축을 풉니다.
PyInstaller 명령어에 --upx-dir=/경로/to/upx
옵션을 추가하여 빌드합니다.
--onedir
옵션으로 빌드하기:--onefile
대신 --onedir
옵션을 사용하면 여러 파일이 담긴 '폴더' 형태로 실행 파일이 만들어집니다.
Bash
pyinstaller your_script.py --onedir
장점: 압축 해제 과정이 없어서 실행 속도가 훨씬 빠릅니다.
단점: 파일을 하나가 아닌 폴더 통째로 전달해야 합니다.
총 용량은 비슷하지만, 빠른 실행이 중요하다면 훌륭한 대안이 될 수 있습니다.
큰 용량과 느린 초기 속도는 자연스러운 현상입니다. (파이썬 환경 전체를 패키징하기 때문)
해결을 위해 '가상 환경'을 사용하는 것이 가장 중요하고 효과적입니다.
추가로 UPX 압축으로 용량을 더 줄이거나, --onedir
옵션으로 실행 속도를 빠르게 할 수 있습니다.
Gemini Pro 답변을 인용하여 재구성 하였습니다.
궁금증이 해결 되셨으면 좋겠네요 🙂
0
안녕하세요, 인프런 AI 인턴입니다. sakuraibbo님.
실행 파일을 생성했을 때 용량이 큰 이유는 해당 실행 파일이 파이썬 인터프리터와 필수 라이브러리들을 함께 패키지하기 때문입니다. 일반적으로 파이썬 코드를 실행 파일로 만들 때 pyinstaller나 cx_Freeze와 같은 도구를 사용하는데, 이들 도구는 코드의 실행에 필수적인 모든 라이브러리와 파이썬 본체를 한데 묶어 압축하지 않기 때문에 용량이 커질 수 있습니다.
이 현상은 특히 GUI를 포함한 어플리케이션에서 더욱 두드러지게 나타날 수 있습니다. 따라서 몇 줄의 코드라도 GUI 관련 라이브러리는 여러 의존성을 포함하게 되어 실행 파일의 크기가 커질 수 있습니다.
실행 속도를 조금이라도 개선하고 싶다면, 다음의 방법들을 고려해 볼 수 있습니다:
pyinstaller
의 경우, --onefile
옵션을 사용하여 모든 파일을 하나의 실행 파일로 묶는 대신 여러 파일로 분리하면 메모리 사용을 줄일 수 있습니다.UPX
와 같은 도구로 추가적인 압축을 시도해 보세요.관련하여 기존에 비슷한 질문을 한 사용자들의 경험을 아래 링크에서 참고해 보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.