首頁 >後端開發 >Python教學 >如何存取Python套件中的靜態檔案?

如何存取Python套件中的靜態檔案?

DDD
DDD原創
2024-12-12 20:38:10714瀏覽

How Can I Access Static Files Within a Python Package?

從Python 套件內部讀取靜態檔案

情況

想像您的Python 套件包含您想要從您的Python 套件中存取的範本文字檔程式。指定這些檔案的路徑時,有必要處理包結構。

TLDR:使用 importlib.resources (Python 3.9 )

如果不考慮向後相容性(即,您使用 Python 3.9 或更高版本),利用 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()

傳統方法:使用Setuptools中的pkg_resources

對於低於3.9的Python版本,請考慮使用setuptoolsp kg_resources模組

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)
步驟:

  1. 在包層次結構中找到您的範本:

    <your-package>
      +--<module-asking-for-the-file>
      +--templates/
           +--temp_file
  2. 引用範本檔案使用方法:

    • 選項1(導入lib.resources):

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

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

    對於目前模組內的文件,請使用
  • 對於目前模組內的文件,請使用> package 作為package參數importlib.resources
  • .
  • importlib.resources.files
  • 函數傳回一個類似路徑的對象,它允許基於上下文管理器的臨時檔案存取。
  • setup.py 中包含任何靜態檔案或MANIFEST
  • 用於打包目的。
  • 考慮在 setup.py 中設定 zip_safe=True
  • 以啟用 zipapp 分發。

以上是如何存取Python套件中的靜態檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn