Maison > développement back-end > Tutoriel Python > Comment puis-je accéder aux fichiers statiques dans un package Python ?

Comment puis-je accéder aux fichiers statiques dans un package Python ?

DDD
Libérer: 2024-12-12 20:38:10
original
709 Les gens l'ont consulté

How Can I Access Static Files Within a Python Package?

Lecture d'un fichier statique à partir d'un package Python

Situation

Imaginez que votre package Python contient des fichiers texte modèles auxquels vous souhaitez accéder depuis votre programme. Lors de la spécification du chemin d'accès à ces fichiers, il devient nécessaire de gérer la structure du package.

TLDR : utilisez importlib.resources (Python 3.9)

Si la compatibilité ascendante n'est pas un problème (c'est-à-dire que vous utilisez Python 3.9 ou supérieur), exploitez le module importlib.resources.

from importlib import resources as impresources
from . import templates

inp_file = impresources.files(templates) / 'temp_file'
with inp_file.open("rt") as f:
    template = f.read()
Copier après la connexion

Méthode traditionnelle : utilisation pkg_resources de Setuptools

Pour les versions Python inférieures à 3.9, pensez à utiliser le module pkg_resources de setuptools distribution.

import pkg_resources

# Could be a dot-separated package/module name or a "Requirement"
resource_package = __name__
resource_path = '/'.join(('templates', 'temp_file'))  # Do not use os.path.join()
template = pkg_resources.resource_string(resource_package, resource_path)
# or for a file-like stream:
template = pkg_resources.resource_stream(resource_package, resource_path)
Copier après la connexion

Étapes :

  1. Localisez vos modèles dans la hiérarchie des packages :

    <your-package>
      +--<module-asking-for-the-file>
      +--templates/
           +--temp_file
    Copier après la connexion
  2. Référencez le fichier modèle en utilisant l'une ou l'autre des méthodes :

    • Option 1 (importlib.resources):

      from . import templates
      
      inp_file = impresources.files(templates) / 'temp_file'
      Copier après la connexion
    • Option 2 (pkg_resources):

      resource_path = '/'.join(('templates', 'temp_file'))
      template = pkg_resources.resource_string(__name__, resource_path)
      Copier après la connexion

Conseils :

  • Pour fichiers à l'intérieur de votre module actuel, utilisez package comme argument du package dans importlib.resources.
  • Le importlib.resources.files La fonction renvoie un objet semblable à un chemin, qui permet un fichier temporaire basé sur un gestionnaire de contexte accès.
  • Incluez tous les fichiers statiques dans votre setup.py ou MANIFEST à des fins d'empaquetage.
  • Envisagez de définir zip_safe=True dans setup.py pour activer zipapp distribution.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal