Python 如何使用源代码中的包_数据中的数据?
在setup.py中,我指定了如下包_数据: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
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')