[python] cx_Freeze를 사용하여 작성한 실행 파일의 디버깅 방법

cx_Freeze는 Python 스크립트를 실행 가능한 바이너리로 변환해주는 라이브러리입니다. cx_Freeze를 사용하여 만들어진 실행 파일이 예상대로 동작하지 않는다면, 디버깅을 해야 할 수도 있습니다. 이 문서에서는 cx_Freeze 실행 파일의 디버깅 방법에 대해서 알아보겠습니다.

1. 실행 파일 생성 옵션 설정하기

cx_Freeze로 실행 파일을 생성할 때, 디버깅을 위한 옵션을 설정할 수 있습니다. build_exe 함수의 options 매개변수를 사용하여 디버깅 옵션을 추가할 수 있습니다. 예를 들어, zip_include_packagesinclude_files 옵션을 설정하여 실행 파일 내에 코드와 종속성 파일을 풀어놓을 수 있습니다.

from cx_Freeze import setup, Executable

# 실행 파일 생성 옵션 설정
options = {
    'build_exe': {
        'zip_include_packages': ['*'],
        'include_files': ['path/to/dependencies']
    }
}

# setup 함수 호출
setup(
    name="MyApp",
    version="1.0",
    options=options,
    executables=[Executable("path/to/script.py")]
)

위와 같이 설정하면 실행 파일 내에 압축되지 않은 코드와 종속성 파일이 포함되어 디버깅에 도움이 됩니다.

2. 실행 파일 실행 시 디버깅 정보 출력하기

디버깅을 위해 실행 파일을 실행하는 동안 로그나 오류 메시지를 출력할 수 있습니다. build_exe 함수의 base 매개변수를 사용하여 실행 파일이 실행될 때 추가로 실행할 코드를 작성할 수 있습니다. 이를 활용하여 로그 파일에 디버깅 정보를 기록하거나 오류 메시지를 출력할 수 있습니다.

import sys

def show_debug_info():
    # 디버깅 정보 출력
    print("Debug information")
    print("Python version:", sys.version)

# 실행 파일 실행 시 디버깅 정보 출력
if __name__ == '__main__':
    show_debug_info()
    # 이후 실행 로직 작성

위 코드에서는 실행 파일이 실행될 때 show_debug_info 함수가 호출되어 디버깅 정보를 출력합니다.

3. 로그 파일 작성하기

실행 파일이 실행되는 동안 로그를 작성하여 디버깅에 도움을 줄 수 있습니다. Python의 logging 모듈을 활용하여 로그 파일을 작성할 수 있습니다. 실행 파일이 실행될 때 로그 파일 생성 및 설정을 추가하면, 실행 중 발생하는 로그를 파일로 남길 수 있습니다.

import logging

def configure_logger():
    logging.basicConfig(filename='debug.log',
                        level=logging.DEBUG,
                        format='%(asctime)s %(levelname)s:%(message)s')

def perform_operation():
    logging.debug('Debug message')
    # 실행 로직 작성

if __name__ == '__main__':
    configure_logger()
    perform_operation()

위 코드에서는 configure_logger 함수를 통해 로그 파일 생성과 설정을 수행한 후, perform_operation 함수에서 로그를 작성하고 필요한 실행 로직을 수행합니다. 로그 파일은 실행 파일과 같은 디렉토리에 debug.log라는 이름으로 생성됩니다.

위에서 설명한 방법들을 활용하여 cx_Freeze로 생성한 실행 파일의 디버깅을 수행할 수 있습니다. 디버깅 정보 출력, 로그 작성 등의 방법을 사용하여 실행 파일의 동작을 분석하고 문제점을 찾아 해결할 수 있습니다.

참고 자료