Maison >développement back-end >Tutoriel Python >Comment regrouper correctement les fichiers de données avec l'option --onefile de PyInstaller ?

Comment regrouper correctement les fichiers de données avec l'option --onefile de PyInstaller ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-15 18:17:16390parcourir

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

Regroupement de données PyInstaller avec --onefile : résolution des ressources manquantes

En cours de création d'un exécutable compact (EXE) avec PyInstaller à l'aide du Avec l'indicateur « --onefile », les utilisateurs rencontrent souvent des difficultés pour regrouper des fichiers de données supplémentaires tels que des images ou des icônes. Ce problème survient lorsque l'EXE compilé ne parvient pas à localiser les ressources référencées.

Une solution particulière, proposée par Shish, impliquait de définir une variable d'environnement avant la méthode d'exécution dans le script :

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

Cette approche peut cependant ne pas fonctionner avec les versions plus récentes de PyInstaller. Au lieu de cela, une solution alternative consiste à utiliser la variable sys._MEIPASS, qui fournit le chemin d'accès au répertoire temporaire créé par PyInstaller pendant l'exécution :

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)

En définissant une fonction personnalisée comme celle-ci, vous pouvez récupérer dynamiquement le chemin absolu vers vos fichiers de données, que vous exécutiez le script en mode développement ou en tant qu'EXE compilé. N'oubliez pas de spécifier le chemin relatif vers votre ressource dans le paramètre relative_path.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn