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

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

DDD
發布: 2024-12-12 20:38:10
原創
709 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板