본문 바로가기
Python/Common

[Python] PyInstaller로 실행 파일(.exe) 만들기

by jiyoon_92 2022. 6. 17.
반응형

python

 

 

Python으로 실행 파일 만들기

1.PyInstaller 설치

Python으로 작성된 파일들을 실행 파일로 만드는데 대표적으로 PyInstaller가 사용된다. 우선 pip를이용해 PyInstaller를 설치한다.

PyInstaller 설치


2. 실행파일(EXE) 파일 만들기

프로젝트 폴더

프로그램의 시작점이 들어있는 .py 파일을 확인한다.

if __name__ == "__main__" :

프로젝트 폴더로 이동하여 명령 프롬프트를 띄운 후 해당 파일명을 넣어 아래와 같이 입력한다.

pyinstaller pdfToImage.py

빌드를 마치면 /dist 폴더와 /build폴더 그리고 .spec 파일이 생성된다.

생성된 폴더

dist/pdfToImage 폴더로 이동하면 .exe 파일이 생성된 걸 확인할 수 있다. 아래와 같을 경우 실행파일을 실행하기 위한 필요한 파일들이 다 나와있으므로 지저분해 보일 수 있다.

 

반응형

 

dist 폴더

하나의 exe로 빌드하고 싶다면, 다시 프로젝트 폴더로 이동하여 명령 프롬프트에 다음과 같이 입력한다. 

pyinstaller -F pdfToImage.py
또는
pyinstaller --onefile pdfToImage.py

실행 결과


3. Spec 파일을 이용하여 PyInstaller 정복하기

pyinstaller를 이용하여 빌드하면 생성된 .spec 파일을 열어보면 다음과 같다. 

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


block_cipher = None


a = Analysis(['pdfToImage.py'],
             pathex=[],
             binaries=[],
             datas=[('.\lib','.\lib')],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='pdfToImage',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None , version='file_version_info.txt')

onefile로 만든 실행파일이 제대로 실행되지 않는 경우 hiddenimports에 import된 모듈 파일들을 넣어줘야 한다.

이번 프로젝트에선 poppler 라이브러리를 통으로 넣어줘서 사용자가 따로 설치하지 않아도 되게끔 만들고 싶어 '\lib'이란 폴더 내에 필요한 library들을 넣어놓고 target path에도 '.\lib'을 넣어주어 해당 path에 통으로 copy되도록 만들었다. 이렇게 만들면 내부 코드에서는 아래와 같이 경로를 사용할 수 있다.

poppler 상대경로

EXE에서는 name으로 생성된 실행 파일의 이름을 지정할 수 있으며, version 정보는 txt 파일을 넣어주어 지정할 수 있다.

text 파일의 포맷은 아래 첨부한다. product version을 바꾸고 pyinstaller를 실행하면 프로그램 속성에서 버전정보가 바뀐 것을 확인할 수 있다.

file_version_info.txt
0.00MB

이렇게 변경된 정보들을 저장한 .spec 파일은 아래와 같이 빌드하여 exe를 생성할 수 있다.

pyinstaller pdfToImage.spec

.py 파일이 아니라 생성된 spec 파일을 넣어줌으로써 위 정보가 적용된 형태로 빌드할 수 있다.

Spec파일의 더 자세한 내용은 아래 경로를 참조할 것!

https://pyinstaller.org/en/stable/spec-files.html

반응형

댓글