ホームページ >バックエンド開発 >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

を使用する Python バージョン 3.9 より前の場合は、setuptoolspkg_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 (importlib.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 はパッケージ化を目的としています。
  • zipapp 配布を有効にするために、setup.pyzip_safe=True を設定することを検討してください。

以上がPython パッケージ内の静的ファイルにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。