您可能想要使用setuptools 附带的pkg_resources 库。
例如,我制作了一个快速的小包"proj" 来说明我将使用的资源组织方案:
项目/setup.py
项目/项目/__init__.py
项目/项目/code.py
项目/项目/资源/__init__.py
项目/项目/资源/图像/__init__.py
项目/项目/资源/图像/pic1.png
项目/项目/资源/图像/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 的目录调用您的测试脚本。如果您与code.py 在同一目录中,Python 将不知道proj 包。所以像proj.resources 这样的事情不会解决。