Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich auf statische Dateien in einem Python-Paket zugreifen?

Wie kann ich auf statische Dateien in einem Python-Paket zugreifen?

DDD
DDDOriginal
2024-12-12 20:38:10712Durchsuche

How Can I Access Static Files Within a Python Package?

Lesen einer statischen Datei aus einem Python-Paket heraus

Situation

Stellen Sie sich vor, Ihr Python-Paket enthält Vorlagentextdateien, auf die Sie aus Ihrem Python-Paket heraus zugreifen möchten Programm. Bei der Angabe des Pfads zu diesen Dateien muss die Paketstruktur berücksichtigt werden.

TLDR: Verwenden Sie importlib.resources (Python 3.9)

Wenn die Abwärtskompatibilität kein Problem darstellt (d. h. Sie Wenn Sie Python 3.9 oder höher verwenden, nutzen Sie das Modul 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()

Traditionelle Methode: Verwenden pkg_resources von Setuptools

Für Python-Versionen unter 3.9 sollten Sie die Verwendung des pkg_resources-Moduls von setuptools in Betracht ziehen Verteilung.

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)

Schritte:

  1. Suchen Sie Ihre Vorlagen in der Pakethierarchie:

    <your-package>
      +--<module-asking-for-the-file>
      +--templates/
           +--temp_file
  2. Referenzieren Sie die Vorlagendatei mit einer der beiden Methoden:

    • Option 1 (importlib.resources):

      from . import templates
      
      inp_file = impresources.files(templates) / 'temp_file'
    • Option 2 (pkg_resources):

      resource_path = '/'.join(('templates', 'temp_file'))
      template = pkg_resources.resource_string(__name__, resource_path)

Tipps:

  • Für Dateien in Ihrem aktuellen Modul verwenden Sie Paket als Paketargument in importlib.resources.
  • Die Funktion importlib.resources.files gibt ein pfadähnliches Objekt zurück, das einen kontextmanagerbasierten temporären Dateizugriff ermöglicht.
  • Fügen Sie alle statischen Dateien in Ihre setup.py ein oder MANIFEST für Verpackungszwecke.
  • Erwägen Sie die Einstellung zip_safe=True in setup.py, um die Zipapp-Verteilung zu aktivieren.

Das obige ist der detaillierte Inhalt vonWie kann ich auf statische Dateien in einem Python-Paket zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn