[Python] 실행파일 만들기

[python]04_pyinstaller

enter image description here

[Python] 실행 파일 만들기

Python을 사용하면서 큰 단점이 몇 가지나 있는데 그 중 하나는 스크립트 언어이기 때문에 배포가 불편하다는 것이다.

이것을 임시로 exe 파일로 만들어 받는 쪽에서 python 이나 라이브러리가 없어도 사용 가능하도록 할 수 있다.

여러 방법들 중 많이 알려진 pyinstaller를 사용하면 된다.

pip install pyinstaller
pyinstaller -w -F NAME.py

-w 는 console 없이 실행
-F 는 패키지 합쳐서 하나의 파일로 만들기

여러가지 라이브러리를 사용하면 좀 더 세밀한 설정이 필요하게 되는데 이때 사용하게 되는 파일이 .spec 파일이다.

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

import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

block_cipher = None

a = Analysis(
    ['burndori.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports = [
        'skimage',
        'skimage.io',
        'skimage.filters',
        'skimage.filters.rank',
        'skimage.filters.rank.core_cy',
        'skimage.measure',
        'skimage.color',
        'skimage.draw',
        'skimage.transform',
        'skimage.util',
        'skimage.util.dtype',
        'skimage._shared',
        'skimage._shared.geometry',
        'skimage.feature',
        'skimage.morphology',
        'skimage.restoration',
        'skimage.segmentation',
        'skimage.viewer',
        'skimage.viewer.qt',
        'skimage.viewer.core',
        'skimage.viewer.plugins',
        'skimage.viewer.utils',
        'skimage.viewer.widgets',
        'skimage.data._fetchers',
    ],
    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='burndori',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=False,
    onefile=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

합성할 때 재귀 제한으로 에러가 난다면 아래 코드 추가

import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

import 가 잘 안되는 라이브러리의 경우에는 아래 코드 추가

hiddenimports ~~~

기타 여러 세밀한 설정들 필요할 때 추가 또는 삭제 하면 된다.

끝. :)

도움이 되셨다면 더 좋은 정보 공유를 위해 광고 클릭 부탁 드립니다 :)

댓글 쓰기

0 댓글