[python] cx_Freeze를 사용하여 패키징한 파이썬 프로그램의 용량 관리하기

파이썬으로 개발한 프로그램을 cx_Freeze를 사용하여 패키징할 때, 종종 용량 관리가 필요한 경우가 있습니다. cx_Freeze는 기본적으로 프로젝트의 모든 종속성을 포함하는 실행 파일을 생성합니다. 이러한 실행 파일의 크기가 커지면 배포 및 설치 시간이 오래 걸리고, 사용자에게 업데이트 파일을 제공하는 데 어려움이 있을 수 있습니다. 따라서 이러한 용량 관리는 중요한 요소가 될 수 있습니다.

이번 글에서는 cx_Freeze를 사용하여 패키징한 파이썬 프로그램의 용량을 관리하는 몇 가지 방법을 살펴보겠습니다.

1. 필요한 패키지만 포함하기

cx_Freeze를 사용하면 프로그램의 모든 종속성을 포함하는 실행 파일을 생성하지만, 실제로 필요한 패키지만 포함하도록 설정할 수 있습니다. 이렇게 하면 실행 파일의 크기를 줄일 수 있습니다.

예를 들어, 다음과 같이 build_exe_optionspackages 매개변수를 사용하여 필요한 패키지를 지정할 수 있습니다.

from cx_Freeze import setup, Executable

build_exe_options = {
    "packages": ["numpy", "matplotlib"]
}

setup(
    name="my_program",
    version="1.0",
    description="My Python program",
    options={"build_exe": build_exe_options},
    executables=[Executable("my_program.py")]
)

위의 예제에서는 numpymatplotlib 패키지만 실행 파일에 포함됩니다. 이를 통해 실행 파일의 크기를 줄일 수 있습니다.

2. Exclude 모듈 사용하기

cx_Freeze를 사용하여 패키징할 때, 일부 모듈은 실행 파일에 포함시키지 않는 것이 좋을 수 있습니다. 예를 들어, 테스트 관련 모듈이나 개발 도구와 관련된 모듈은 배포에 필요하지 않을 수 있습니다.

이러한 경우에는 build_exe_optionsexcludes 매개변수를 사용하여 제외할 모듈을 지정할 수 있습니다.

from cx_Freeze import setup, Executable

build_exe_options = {
    "excludes": ["pytest", "sphinx"]
}

setup(
    name="my_program",
    version="1.0",
    description="My Python program",
    options={"build_exe": build_exe_options},
    executables=[Executable("my_program.py")]
)

위의 예제에서는 pytestsphinx 모듈이 실행 파일에 포함되지 않습니다.

3. 압축 사용하기

cx_Freeze로 생성된 실행 파일은 압축되지 않은 상태로 생성됩니다. 따라서 실행 파일의 크기를 줄이기 위해 압축을 사용할 수 있습니다.

이를 위해 build_exe_optionscreate_shared_zip 매개변수를 True로 설정하면 실행 파일이 압축됩니다.

from cx_Freeze import setup, Executable

build_exe_options = {
    "create_shared_zip": True
}

setup(
    name="my_program",
    version="1.0",
    description="My Python program",
    options={"build_exe": build_exe_options},
    executables=[Executable("my_program.py")]
)

위의 예제에서는 실행 파일이 압축됩니다.

결론

이번 글에서는 cx_Freeze를 사용하여 패키징한 파이썬 프로그램의 용량을 관리하는 몇 가지 방법을 알아보았습니다. 필요한 패키지만 포함하고, 제외할 모듈을 설정하고, 실행 파일을 압축하여 용량을 줄일 수 있습니다. 이러한 방법들을 조합하여 용량 관리에 효과적으로 대응할 수 있습니다.

참고: cx_Freeze 문서