Maison > développement back-end > Tutoriel Python > Comment puis-je accéder correctement aux fichiers de données regroupés dans un exécutable PyInstaller --onefile ?

Comment puis-je accéder correctement aux fichiers de données regroupés dans un exécutable PyInstaller --onefile ?

Mary-Kate Olsen
Libérer: 2024-12-14 16:39:10
original
649 Les gens l'ont consulté

How Can I Properly Access Bundled Data Files in a PyInstaller --onefile Executable?

Regrouper des fichiers de données avec PyInstaller (--onefile)

Regrouper des fichiers de données dans un seul fichier exécutable (--onefile) peut être un solution pratique pour le déploiement d’applications. Cependant, rencontrer des problèmes lors de l’utilisation de cette option peut être frustrant. Dans ce guide, nous aborderons un problème courant où les fichiers externes tels que les images et les icônes ne se chargent pas correctement bien qu'ils soient inclus dans le fichier .spec.

Aperçu du problème

L'interrogateur n'a pas pu regrouper une image et une icône dans son exécutable PyInstaller à l'aide de l'option --onefile. Alors que l'application fonctionnait correctement avec --onedir, l'utilisation de --onefile entraînait la non-localisation des fichiers externes. Ce problème persistait même si les fichiers étaient présents dans le répertoire temporaire créé lors de l'exécution de l'exécutable.

Solution

Dans les anciennes versions de PyInstaller, une variable d'environnement était définie sur pointez vers l’emplacement des fichiers regroupés. Toutefois, dans les versions plus récentes, ce comportement a changé. Au lieu de cela, le chemin est désormais défini comme sys._MEIPASS.

Pour résoudre ce problème, mettez à jour votre code pour utiliser sys._MEIPASS pour accéder aux fichiers regroupés :

import sys

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)
Copier après la connexion

En utilisant cette mise à jour approche, vous pouvez accéder de manière fiable aux fichiers regroupés dans votre exécutable PyInstaller, même lorsque vous utilisez l'option --onefile.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal