Python 如何使用源代码中的包_数据中的数据?

Python 如何使用源代码中的包_数据中的数据?,python,build,setuptools,distutils,distribute,Python,Build,Setuptools,Distutils,Distribute,在setup.py中,我指定了如下包_数据: packages=['hermes'], package_dir={'hermes': 'hermes'}, package_data={'hermes': ['templates/*.tpl']}, 我的目录结构大致是 hermes/ | | docs/ | ... | hermes/ | | __init__.py | code.py | templates | | py

在setup.py中,我指定了如下包_数据:

packages=['hermes'],
package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},
我的目录结构大致是

hermes/
 |
 | docs/
 | ...
 | hermes/
    | 
    | __init__.py
    | code.py
    | templates
        |
        | python.tpl
 |
 | README
 | setup.py
问题是,我需要在源代码中使用templates目录中的文件,以便编写python代码(该项目是一个解析器生成器)。我似乎不知道如何从代码中正确地包含和使用这些文件。有什么想法吗?

该标准将计算数据相对于包的路径,并通过用于导入
hermes
包的模块加载程序Python为您检索数据:

import pkgutil
data = pkgutil.get_data('hermes', 'templates/python.tpl')
当然,在某些情况下,您可以使用从<代码>爱马仕.y.Fielex计算的路径读取数据,但是如果您计划分发项目,请考虑它可以以不同的方式安装在终端用户的机器上:作为普通文件,部署在压缩的鸡蛋存档中,等等,在后一种情况下,Python将使用
zipimporter
导入您的
hermes
模块,阻止您执行正常的
打开(路径)。read()


可以使用
\uuuu name\uuuu
而不是直接指定模块名称,因此
数据=pkg\u资源。资源字符串('hermes','templates/python.tpl')
变成
数据=pkg\u资源。资源字符串('uuuuu name','templates/python.tpl')
请使用
路径=pkg\u资源。资源文件名('hermes','templates/python.tpl'))
如果您只想获取数据包的路径,并自己读取。
>>> import hermes
>>> hermes.__loader__
<zipimporter object "/home/pat/.cascade/virt/foo/lib/python2.6/site-packages/foo-0.0.0-py2.6.egg">
import pkg_resources
data = pkg_resources.resource_string('hermes', 'templates/python.tpl')