Möglicherweise möchten Sie pkg_resources
Bibliothek verwenden, die mit setuptools
kommt.
Zum Beispiel habe ich ein schnelles kleines Paket "proj"
gemacht, um das Ressourcenorganisationsschema zu illustrieren ich verwenden würde:
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
Beachten Sie, wie ich alle Ressourcen halte in einem separaten subpackage.
"code.py"
zeigt, wie pkg_resources
auf die Ressourcenobjekte zu bezeichnen ist:
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')
Wenn Sie es ausführen, erhalten Sie:
['__init__.py', '__init__.pyc', 'pic1.png', 'pic2.png']
iVBORw0KGgoAAAANSUhE ...
Wenn Sie eine Ressource als Fileobject behandeln müssen, Verwenden Sie resource_stream()
.
Der Code, um die Ressourcen zugreifen können überall innerhalb der subpackage Struktur Ihres Projekts sein, es muss nur durch vollständigen Namen die Bilder beziehen sich auf Subpackage enthalten: proj.resources.images
, in diesem Fall.
Hier "setup.py"
:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='proj',
packages=find_packages(),
package_data={'': ['*.png']})
Caveat: Um die Dinge zu testen "vor Ort", dh w/o das Paket zuerst installieren, werden Sie Ihre Test-Scripts aus dem Verzeichnis aufrufen müssen, die setup.py
hat . Wenn Sie sich im selben Verzeichnis wie code.py
befinden, weiß Python nichts über proj
Paket. Dinge wie proj.resources
werden nicht aufgelöst.
Nun, die Nachteile hier sind zu viel. Gibt es nicht eine einfache Möglichkeit, Ressourcen mit Python-Projekten zu packen? –
Ich kenne nur 2 weit verbreitete Wege (sie sind leider nicht einfach): 1) 'distutils-way (standard): Die Dokumentation lässt den Zugriff auf Ressourcendateien als Übung für den Leser (wahrscheinlich weil sie Pfadmanipulationen denken relativ zu '__file__' sind alles was man braucht). 2) 'setuptools'-Weg (Obermenge von' distutils'), oben beschrieben. –