본문 바로가기
Python

[Python] PyInstaller로 exe파일 만들기

by 아마도개발자 2024. 9. 14.

PyInstaller는 파이썬으로 exe실행파일을 만들 수 있는 가장 간단하고 쉬운 방법 중 하나이다.

PyInstaller를 사용해서 exe를 만드는 방법을 알아보자. 

 

우선 pip로 PyInstaller를 설치한다

 

pip install pyinstaller

 

PyInstaller가 설치되면 실행 파일로 만들 파이썬 스크립트를 만들어 준다.

만약 파이썬 스크립트의 파일이름이 sample.py라면

 

pyinstaller sample.py

 

명령어를 통해 손쉽게 exe 파일을 만들 수 있다. 해당 명령어를 사용할 때 다양한 옵션들을 추가할 수 있는데, 주로 쓰이는 옵션은 아래와 같다.

 

pyinstaller -F sample.py # 하나의 실행 파일로 생성
pyinstaller --onedir sample.py # 기본값, 실행 파일과 관련 파일을 디렉토리로 만듦
pyinstaller --name=NAME sample.py # 생성될 파일의 이름 지정
pyinstaller -W sample.py # 콘솔 창이 보이지 않도록 설정

pyinstaller --add-data "SRC;DEST" sample.py # 데이터 파일을 포함 (외부 패키지 추가시 사용 가능)
pyinstaller --uac-admin sample.py # 관리자 권한으로 실행

 

위 명령어들을 사용하면 다양한 조건의 exe파일을 만들 수 있다. 혹은 spec 파일을 수정하는 방법도 있는데, pyinstaller로 exe파일을 만들고 나면 spec파일이 생성되어 있는 것을 확인할 수 있다. (빌드파일은 기본적으로 dist폴더 내에 생성)

 

sample.spec

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['sample.py'],
    pathex=[],
    binaries=[],
    datas=[('C:\\Users\\사용자\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pyfiglet', './pyfiglet')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='sample',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    uac_admin=True
)

 

 

위 코드를 보면 pyfiglet 모듈을 추가하고, uac_admin=True로 관리자 권한으로 exe파일을 실행하도록 설정해놓은 것을 확인할 수 있다.

 

참고로 uac_admin 속성을 True로 준 이유는, 만약 exe파일이 C드라이브나 관리자만 접근할 수 있는 폴더에 접근을 할 경우 Unhandled Exception이 발생하며 "권한 상승이 필요합니다"라는 에러메세지가 뜰 수 있기 때문이다.

 

이렇게 기본적인 옵션 명령어만 몇 가지 숙지하고 있다면 정말 간단하게 exe파일을 만들 수 있기 때문에 매우 추천하는 패키지이다.

'Python' 카테고리의 다른 글

[Python] Windows Service 만들기  (0) 2023.11.19