首页 > 后端开发 > Python教程 > 如何访问Python包中的静态文件?

如何访问Python包中的静态文件?

DDD
发布: 2024-12-12 20:38:10
原创
708 人浏览过

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版本,请考虑使用setuptools中的pkg_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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板