[python] PyInstaller를 사용하여 작성한 프로그램에서 사용된 외부 라이브러리의 버전을 관리하는 방법은?

일반적으로 PyInstaller를 사용하여 프로그램을 패키징하면, 외부 라이브러리의 코드와 버전 정보는 함께 번들되어 실행 파일 안에 포함됩니다. 그러나 이렇게 프로그램을 빌드할 경우, 외부 라이브러리의 버전이 변경되었을 때 프로그램을 재빌드해야만 합니다. 이는 관리하기 어려울 수 있습니다.

이를 해결하기 위해, 프로그램 내에서 사용되는 외부 라이브러리의 버전 정보를 별도의 설정 파일이나 모듈에 저장하는 것이 좋습니다. 이렇게 하면 버전 정보를 중앙에서 관리할 수 있으며, 프로그램을 재빌드하지 않고도 라이브러리의 업데이트를 수행할 수 있습니다.

예를 들어, requirements.txt 파일에 사용된 외부 라이브러리의 이름과 버전을 기록하여 관리할 수 있습니다. 이 파일에는 다음과 같은 내용이 포함될 수 있습니다.

requests==2.26.0
numpy==1.21.2

이렇게 기록된 라이브러리 정보는 pip 명령어를 사용하여 쉽게 설치하거나 업데이트할 수 있습니다. 프로그램을 실행할 때 적절한 라이브러리 버전이 설치되어 있는지 확인하고, 버전이 일치하지 않을 경우 사용자에게 업데이트를 요청하는 메시지를 표시할 수도 있습니다.

또는 Python에서는 pkg_resources 모듈을 사용하여 현재 프로그램의 요구 사항을 확인할 수 있습니다. 다음은 pkg_resources를 사용하여 라이브러리의 버전을 확인하는 예제 코드입니다.

import pkg_resources

required_packages = [
    'requests==2.26.0',
    'numpy==1.21.2'
]

for package in required_packages:
    try:
        pkg_resources.require(package)
    except pkg_resources.DistributionNotFound:
        print(f"Required package {package} not found.")
    except pkg_resources.VersionConflict:
        print(f"Version conflict for {package}. Found: {pkg_resources.get_distribution(package)}, required: {package}.")

이 코드는 각각의 필요한 패키지가 설치되어 있는지 확인하고, 버전이 일치하지 않으면 해당 정보를 출력합니다.

이렇게 외부 라이브러리의 버전을 관리하는 방법은 프로그램의 유지 관리를 용이하게 만들어주며, 업데이트와 버그 수정 등을 더욱 효율적으로 수행할 수 있습니다.

관련 참고 자료: