본문 바로가기
코딩취미/Python

pyinstaller 옵션 명령과 exe 생성툴(패키지) 비교

by 브링블링 2024. 4. 5.
반응형

pyinstaller 옵션 명령과 exe 생성툴 비교 

PyInstaller는 Python 스크립트를 스탠드얼론 실행 파일로 변환하는 도구입니다. 이는 개발자가 Python 환경이 설치되지 않은 컴퓨터에서도 Python 프로그램을 실행할 수 있게 해줍니다. PyInstaller는 다양한 운영 체제(Windows, macOS, Linux)를 지원하며, 실행 파일을 만들 때 필요한 모든 종속성과 라이브러리를 하나의 패키지로 묶어줍니다. 이로 인해 애플리케이션의 배포가 간소화되며, 사용자는 별도의 Python 설치 과정 없이 애플리케이션을 실행할 수 있습니다.

pyinstaller 공식문서 사이트 및 라이센스

PyInstaller는 GNU General Public License (GPL) v2 또는 그 이후 버전으로 라이센스가 부여됩니다. 이는 PyInstaller를 사용, 복사, 수정 및 배포할 수 있는 권리를 제공하지만, GPL에 따라 배포 시 소스 코드를 공개해야 하고, 동일한 라이센스 하에 배포해야 한다는 조건이 붙습니다. GPL 라이센스의 이러한 특성 때문에, PyInstaller로 생성된 실행 파일이나 이를 포함한 애플리케이션을 배포할 때는 라이센스 조건을 충족해야 합니다.

 

* 공식문서 사이트 : https://pyinstaller.readthedocs.io/

* GPL 라이센스 사이트 : https://www.gnu.org/licenses/gpl-2.0.html

 

pyintaller를 사용해서 만든 exe 코드의 공개 유무

PyInstaller로 생성된 실행 파일(.exe)에 대한 소스 코드 공개 여부는 사용된 소스 코드의 라이센스와 PyInstaller의 라이센스에 의해 결정됩니다. PyInstaller 자체는 GNU General Public License (GPL) v2 또는 그 이후 버전으로 라이센스되어 있지만, 이는 PyInstaller 소프트웨어에 적용되는 것이지, PyInstaller를 사용하여 생성된 실행 파일에 직접 적용되는 것은 아닙니다.

 

PyInstaller를 사용하여 생성된 실행 파일에 포함된 당신의 소스 코드에 대해서는, 그 소스 코드에 적용된 라이센스가 결정합니다. 예를 들어, 당신의 코드가 GPL과 같은 오픈 소스 라이센스로 라이센스되어 있다면, 해당 라이센스 조건에 따라 소스 코드를 공개해야 할 수도 있습니다. 하지만 당신의 코드가 독점적이거나 다른 라이센스 하에 있다면, 그 라이센스 조건을 따라야 합니다.

 

요약하자면, PyInstaller의 사용 자체가 실행 파일에 대한 소스 코드 공개를 요구하지는 않습니다. 소스 코드 공개 요구 여부는 당신의 소스 코드에 적용된 라이센스에 의해 결정됩니다. 따라서, 사용하는 코드의 라이센스를 확인하고 이에 따라 행동하는 것이 중요합니다.

반응형
728x90

pyinstaller 옵션 명령어

PyInstaller를 사용하여 복잡한 애플리케이션을 패키징할 때, 이러한 옵션들을 조합하여 사용하면 빌드 프로세스를 더욱 세밀하게 제어할 수 있습니다.

옵션 설명
-F, --onefile 단일 파일로 애플리케이션을 빌드합니다. 모든 것이 하나의 실행 파일에 포함됩니다.
--onedir (기본 설정) 애플리케이션을 디렉터리(폴더) 안에 빌드합니다.
--name NAME 생성된 실행 파일의 이름을 지정합니다.
--icon=ICON_FILE 애플리케이션의 아이콘 파일(.ico)을 지정합니다. -i와 동일하지만 다른 형식입니다.
--noicon 실행 파일에 아이콘을 포함하지 않습니다.
-add-data <SRC;DEST> 애플리케이션에 데이터 파일을 추가합니다. SRC는 소스 파일, DEST는 목적지 디렉터리입니다.
--add-binary <SRC;DEST> 애플리케이션에 바이너리 파일을 추가합니다. SRC는 소스 파일, DEST는 목적지 디렉터리입니다.
--paths DIR 모듈 검색 경로를 추가합니다. 여러 개 지정 가능합니다.
--runtime-hook FILE 런타임 훅 스크립트 파일을 추가합니다.
-exclude-module MODULENAME 빌드에서 특정 Python 모듈을 제외합니다.
--hidden-import MODULENAME PyInstaller가 자동으로 찾지 못하는 숨겨진 import를 추가합니다.
--additional-hooks-dir DIR 추가적인 훅 디렉터리를 지정합니다.
--key KEY 생성된 실행 파일을 암호화하는 데 사용되는 키를 지정합니다.
--collect-submodules MODULENAME 특정 모듈의 모든 서브 모듈을 수집합니다.
--collect-data MODULENAME 모듈의 데이터 파일을 수집합니다.
--collect-binaries MODULENAME 모듈의 바이너리를 수집합니다.
--collect-all MODULENAME 지정된 모듈의 모든 리소스(서브 모듈, 데이터, 바이너리)를 수집합니다.
--log-level LEVEL 로깅 레벨을 설정합니다 (ERROR, WARN, INFO, DEBUG).
-h, --help 도움말을 표시합니다.
-v, --version PyInstaller 버전을 표시합니다.
--distpath DIR 생성된 배포판을 저장할 디렉터리를 지정합니다. 기본값은 ./dist 입니다.
--workpath WORKPATH 작업 폴더를 지정합니다. 기본값은 ./build 입니다.
--specpath DIR .spec 파일을 저장할 디렉터리를 지정합니다. 기본값은 현재 디렉터리입니다.
-y, --noconfirm 빌드 디렉터리를 덮어쓰는 것에 대한 확인 없이 진행합니다.
--upx-dir UPX_DIR UPX 실행 파일이 있는 디렉터리를 지정합니다.
-a, --ascii 바이너리에서 유니코드 인코딩을 제외합니다.
-d, --debug [DEBUG] 디버그 모드를 활성화합니다. 여러 디버그 옵션이 있습니다.
-s, --strip 실행 파일에서 심볼 테이블을 제거합니다.
--noupx 실행 파일을 UPX로 압축하지 않습니다.
--clean 이전 빌드를 청소합니다.
-c, --console, --nowindowed 콘솔 애플리케이션을 생성합니다.
-w, --windowed, --noconsole 창이 있는 GUI 애플리케이션을 생성합니다. 콘솔 창이 없습니다.
-i <FILE.ico> 애플리케이션 아이콘을 지정합니다.
--runtime-tmpdir PATH 런타임에 임시 파일을 저장할 디렉터리를 지정합니다.
--bootloader-ignore-signals 부트로더가 시그널을 무시하도록 합니다.

 

--add-data 사용 예제

--add-data 옵션은 특정 데이터 파일(예: 설정 파일, 이미지 등)을 애플리케이션에 포함시키는 데 사용됩니다. 구문은 --add-data <파일의 소스 위치>; <대상 위치>입니다. 대상 위치는 실행 파일 내부에서 파일이 위치할 경로를 나타냅니다. 예를 들어, config.ini 파일을 Windows에서 애플리케이션의 data 폴더 아래에 포함시키려면 다음과 같이 합니다. Linux나 macOS에서는 경로 구분자로 콜론(:)을 사용합니다.

pyinstaller --add-data "config.ini;data" your_script.py

 

--add-binary 사용 예제

--add-binary 옵션은 특정 바이너리 파일(예: DLL 라이브러리, 공유 라이브러리 등)을 애플리케이션에 포함시키는 데 사용됩니다. 구문은 --add-binary <파일의 소스 위치>; <대상 위치>입니다. 예를 들어, libexample.so 공유 라이브러리를 Linux에서 애플리케이션의 libs 폴더 아래에 포함시키려면 다음과 같이 합니다.

pyinstaller --add-binary "example.dll;libs" your_script.py

EXE 생성 툴 비교 (동일한 기능을 하는 다른 패키지들)

  1. cx_Freeze: Python 스크립트를 스탠드얼론 실행 파일로 변환합니다. 다양한 운영 체제를 지원합니다.
  2. Py2exe: 주로 Windows에서 사용되며, Python 스크립트를 실행 가능한 Windows 애플리케이션으로 변환합니다.
  3. Py2app: macOS에서 Python 스크립트를 Mac 애플리케이션으로 변환하는 데 사용됩니다.
기능/패키지 PyInstaller cx_Freeze Py2exe Py2app
지원 OS Windows, macOS, Linux Windows, macOS, Linux Windows macOS
사용 용이성 높음 중간 중간 중간
실행 파일 크기 중간(때때로 큼) 중간 상대적으로 큼 중간
커스터마이징 가능성 높음(명령줄 옵션, .spec 사용) 높음(setup.py 설정) 낮음 낮음
단일 파일 실행 지원 지원 지원하지 않음 지원하지 않음
종속성 해결 자동 자동 자동 자동
다양한 Python 버전 지원 넓음 넓음 제한적 제한적
  • PyInstaller는 사용 용이성과 종속성 해결에서 강점을 가지며, 다양한 OS에서 단일 파일로 실행 가능한 애플리케이션을 생성할 수 있습니다. 그러나 때로 실행 파일의 크기가 다소 크게 나올 수 있습니다.
  • cx_Freeze는 비슷한 범위의 OS를 지원하지만, PyInstaller에 비해 설정이 다소 복잡할 수 있습니다.
  • Py2exe는 Windows 전용으로, 설정이 비교적 간단하지만, macOS나 Linux에서는 사용할 수 없으며, 실행 파일 크기가 큰 편입니다.
  • Py2app는 macOS 전용으로, Mac 애플리케이션 생성에 최적화되어 있지만, 다른 OS에서는 사용할 수 없습니다.

PyInstaller

  • 특징: PyInstaller는 간편한 사용법과 넓은 호환성으로 인기 있는 Python 애플리케이션 패키징 도구입니다. 단일 실행 파일 생성 옵션을 제공하며, 복잡한 종속성을 자동으로 처리합니다. GUI 애플리케이션에 대한 지원이 뛰어납니다.
  • 장점: 사용의 용이성, 단일 실행 파일 생성, 강력한 종속성 분석, 넓은 운영 체제 지원.
  • 단점: 때때로 생성된 실행 파일의 크기가 큰 편임, 특정 경우에 종속성 해결에 어려움을 겪을 수 있음.
pyinstaller --onefile --windowed sample.py

cx_Freeze

  • 특징: cx_Freeze는 Python 스크립트를 실행 파일로 변환하는 크로스 플랫폼 도구입니다. 다양한 운영 체제에서 작동하며, Python 3.5 이상을 지원합니다. setup.py 스크립트를 통한 세부 설정을 제공하여 패키징 과정을 세밀하게 제어할 수 있습니다.
  • 장점: 크로스 플랫폼 지원, 다양한 Python 버전 호환성, 패키징 과정의 세밀한 제어 가능.
  • 단점: 사용자에게 다소 복잡할 수 있는 설정 과정, PyInstaller에 비해 커뮤니티 지원이 덜 활발할 수 있음.

cx_Freeze 예제 코드 (setup.py):

from cx_Freeze import setup, Executable

# 종속성 설정
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}

base = None

setup(
    name = "sample_app",
    version = "0.1",
    description = "Sample cx_Freeze Script",
    options = {"build_exe": build_exe_options},
    executables = [Executable("sample.py", base=base)]
)

Py2exe

  • 특징: Windows 전용. Python 스크립트를 Windows 실행 파일로 변환.
  • 장점: Windows에 최적화되어 있음, 필요한 모든 종속성을 자동으로 감지하여 포함.
  • 단점: Windows 외의 OS 지원이 없음, 단일 실행 파일 생성이 기본적으로 지원되지 않음.
from distutils.core import setup
import py2exe

setup(console=['example.py'])
python setup.py py2exe

Py2app

  • 특징: macOS 전용. Python 스크립트를 macOS 애플리케이션(.app)으로 변환.
  • 장점: macOS 애플리케이션 배포에 최적화, app 번들 생성을 지원하여 Mac 사용자에게 익숙한 설치 경험 제공.
  • 단점: macOS 외의 OS를 지원하지 않음, 때때로 종속성 해결에 어려움을 겪을 수 있음.

Py2app 예제 코드 (setup.py): 

from setuptools import setup

APP = ['example.py']
DATA_FILES = []
OPTIONS = {
    'argv_emulation': True,
    'packages': ['required_module'],
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
python setup.py py2app
반응형