pkg_resources
に付属のライブラリを使用することをお勧めしますsetuptools
。
たとえば、"proj"
使用するリソース編成スキームを説明するための簡単なパッケージを作成しました。
proj / setup.py
proj / proj / __ init__.py
proj / proj / code.py
proj / proj / resources / __ init__.py
proj / proj / resources / images / __ init__.py
proj / proj / resources / images / pic1.png
proj / proj / resources / images / pic2.png
すべてのリソースを別のサブパッケージに保持する方法に注目してください。
"code.py"
pkg_resources
は、リソースオブジェクトを参照するためにどのように使用されるかを示しています。
from pkg_resources import resource_string, resource_listdir
# Itemize data files under proj/resources/images:
print resource_listdir('proj.resources.images', '')
# Get the data file bytes:
print resource_string('proj.resources.images', 'pic2.png').encode('base64')
それを実行すると、次のようになります。
['__init __。py'、'__init __。pyc'、'pic1.png'、'pic2.png']
iVBORw0KGgoAAAANSUhE..。
リソースをファイルオブジェクトとして扱う必要がある場合は、を使用しますresource_stream()
。
proj.resources.images
リソースにアクセスするコードは、プロジェクトのサブパッケージ構造内のどこにあってもかまいません。この場合は、フルネームで画像を含むサブパッケージを参照する必要があります。
ここにあり"setup.py"
ます:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='proj',
packages=find_packages(),
package_data={'': ['*.png']})
警告:
「ローカル」でテストするには、つまり最初にパッケージをインストールせずに、を含むディレクトリからテストスクリプトを呼び出す必要がありますsetup.py
。と同じディレクトリにいる場合、Pythonはパッケージcode.py
について認識しません。proj
したがって、のようなものproj.resources
は解決されません。