>백엔드 개발 >파이썬 튜토리얼 >PyInstaller의 --onefile 옵션을 사용하여 데이터 파일을 올바르게 번들링하는 방법은 무엇입니까?

PyInstaller의 --onefile 옵션을 사용하여 데이터 파일을 올바르게 번들링하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-15 18:17:16391검색

How to Bundle Data Files Correctly with PyInstaller's --onefile Option?

--onefile을 사용한 PyInstaller 데이터 번들링: 누락된 리소스 해결

다음을 사용하여 PyInstaller로 압축 실행 파일(EXE)을 생성하는 과정에서 '--onefile' 플래그를 사용하면 사용자가 이미지나 아이콘과 같은 추가 데이터 파일을 묶는 데 어려움을 겪는 경우가 많습니다. 이 문제는 컴파일된 EXE가 참조된 리소스를 찾지 못하는 경우 발생합니다.

Shish가 제안한 특정 솔루션 중 하나는 스크립트에서 실행 메서드 앞에 환경 변수를 설정하는 것과 관련이 있습니다.

import os
os.environ["IMAGE_PATH"] = os.path.join(os.path.dirname(os.path.abspath(__file__)), "images")

그러나 이 접근 방식은 최신 버전의 PyInstaller에서는 작동하지 않을 수 있습니다. 대신, 대체 솔루션은 런타임 중에 PyInstaller가 생성한 임시 디렉터리에 대한 경로를 제공하는 sys._MEIPASS 변수를 활용하는 것입니다.

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

이와 같은 사용자 정의 함수를 정의하면 개발 모드에서 스크립트를 실행하는지 또는 컴파일된 EXE로 스크립트를 실행하는지에 관계없이 데이터 파일의 절대 경로입니다. 상대_경로 매개변수 내에서 리소스에 대한 상대 경로를 지정하는 것을 잊지 마세요.

위 내용은 PyInstaller의 --onefile 옵션을 사용하여 데이터 파일을 올바르게 번들링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.