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')
@pycon2009,有一个关于distutils和setuptools的演示。你可以在这里找到所有的视频
Eggs and Buildout Deployment in Python - Part 1
Eggs and Buildout Deployment in Python - Part 2
Eggs and Buildout Deployment in Python - Part 3
在这些视频中,它们描述了如何在包中包含静态资源。我相信这是第二部分。
使用setuptools,您可以定义依赖关系,这将允许您有两个包使用来自第三个包的资源。
Setuptools还为您提供了一种访问这些资源的标准方法,并允许您使用包内的相对路径,这样就无需担心包的安装位置。
您始终可以在每个需要它的子包中有一个单独的“resources”文件夹,并使用
os.path
函数从子包的__file__
值获取这些资源。为了说明我的意思,我在三个位置创建了以下__init__.py
文件:这是
__init__.py
文件:在c:\ temp\work中,我创建了一个应用程序topapp.py,如下所示:
这将使用
topp
包和子包重新呈现应用程序。然后我运行它:果然如此。我们将PYTHONPATH设置为模拟包在路径上:
如您所见,资源路径正确解析为路径上实际(子)包的位置。
更新:Here是相关的py2exe文档。
您可能想使用
pkg_resources
附带的setuptools
库。例如,我制作了一个快速的小程序包
"proj"
,来演示我将使用的资源组织方案:注意我如何将所有资源保存在一个单独的子包中。
"code.py"
显示如何使用pkg_resources
引用资源对象:如果你运行它,你会得到:
如果需要将资源视为文件对象,请使用
resource_stream()
。访问资源的代码可能在项目的子包结构中的任何位置,在本例中,它只需要引用包含全名为
proj.resources.images
的图像的子包。这里是
"setup.py"
:警告: 要测试“本地”的东西,即不需要先安装包,您必须从具有
setup.py
的目录调用测试脚本。如果您与code.py
在同一目录中,Python将不知道proj
包。所以像proj.resources
这样的事情不会解决。相关问题 更多 >
编程相关推荐