PINKYETI

[Python] PyInstaller - 파이썬으로 .exe 파일 만들기 (하나의 실행 파일 만들기 / Background 프로세스 만들기) 본문

# Dev Note/[PYTHON]

[Python] PyInstaller - 파이썬으로 .exe 파일 만들기 (하나의 실행 파일 만들기 / Background 프로세스 만들기)

PINKYETI 2022. 7. 19. 23:15


"Python을 활용한 .exe 파일 만들기"
"Python으로 Background(데몬) 프로세스 만들기"
"하나의 .exe 파일 만들기"

안녕하세요. 핑크예티입니다.
파이썬을 활용하여 Application을 구현하다 보면
위와 같은 궁금증들이 생기기 마련인데요,
오늘은 Python을 통해 .exe 파일을 만들어주는
라이브러리인 "PyInstaller" 의 간단한 활용 예제에 대해
알아보도록 하겠습니다.

1. Python Source Code 작성 (.py)

먼저 만들고자하는 파이썬 코드를 작성해보겠습니다.
이 때, PyInstaller를 통해 소스를 말기 위해
.py 확장자로 소스 코드를 작성해주세요.

InstallerTest.py 라는 파일을 파이참을 통해 작성했습니다.
해당 실행 파일은 'exit' 를 입력했을 때 종료되는
간단한 프로그램입니다.
자세한 코드 내용은 주석 참고해주세요

while 1==1:
    ### Input 값 입력 ###
    print('값을 입력하시오.')
    x = input()

    ### exit를 입력 받을 경우, 시스템 종료 ###
    if x == 'exit':
        print('시스템을 종료합니다.')
        print('-------------------')
        break;
    ### 이 외 값 입력 받을 경우, Input 값 재입력 ###
    else:
        print('값을 다시 입력하시오.')
        print('-------------------')



2. PyInstaller 라이브러리 설치

라이브러리 설치는 명령 프롬프트 이용해서
아래 명령어만 입력해주시면 됩니다.

- pip install pyinstaller


3. PyInstaller 통해 .exe 파일 만들기

먼저 PyInstaller를 사용하기 위한 명령어와
주요 옵션에 대해 알아보도록 하겠습니다.

- pyinstaller [-F] [-w] Installer.py
>> 저는 단일 실행 파일을 만들기 위해, -F 옵션을 추가하고
백그라운드로 동작하면 안되기에, -w 옵션을 제외했습니다.

-F 하나의 실행 파일(.exe) 생성
-w Nonconsole Option (프로그램 실행 시, 명령 프롬프트 창이 뜨지 않음.)


자 이제, 실행 파일을 만들기 위해
InstallerTest.py 가 작성된 경로로 이동한 뒤
cmd 창을 켜준 후, 명령어를 입력하도록 하겠습니다.

PyInstaller 라이브러리를 통해 성공적으로
실행 파일을 만들었다는 로그를 확인해줍니다.

그럼 아래처럼 실행 결과 파일/폴더들이 생기는데
.exe 파일은 'dist' 경로안에 생성됩니다.
(PyInstaller 결과 생성되는 파일/폴더는 이전 이미지와 비교해주세요.)



4. Sample 프로그램(.exe) 실행

프로그램 실행 결과 Console 창에서 실행되며
'exit' 이외의 값을 입력하면 Input을 다시받는
간단한 프로그램이 생성되었습니다.



#. 추가 팁 : 실행 파일(.exe) 크기 줄이기

파이썬 데몬 프로세스 개발을 진행하며
Anaconda의 쥬피터 노트북으로 소스 개발을 하고,
콘다 프롬프트로 실행 파일을 만들었었는데요.
실행 파일(.exe)의 크기가 무지하게 커졌습니다
(약 400MB 정도..)

이때, 실행 파일 크기를 줄이기 위해 Python 엔진을
따로 설치하고, 필수 라이브러리만 install 한 뒤
환경 변수를 신규 엔진으로 잡은 후에 소스를 말았더니
파일의 크기가 17MB 정도로 줄었습니다.

나중에 알아보니 콘다 경로에 설치된 모든 라이브러리들이
같이 말리면서 파일 크기가 엄청 커진거더라구요 ㅎㅎ

혹여 위와 같은 문제를 겪고 계신 분들음 참고해주세요^^