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
Freigeben: 2024-12-12 20:38:10
Original
709 Leute haben es durchsucht

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()
Nach dem Login kopieren

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)
Nach dem Login kopieren

Schritte:

  1. Suchen Sie Ihre Vorlagen in der Pakethierarchie:

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

    • Option 1 (importlib.resources):

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

      resource_path = '/'.join(('templates', 'temp_file'))
      template = pkg_resources.resource_string(__name__, resource_path)
      Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage