如何从源代码使用package_data中的数据?
在setup.py,我指定package_data这样的:如何从源代码使用package_data中的数据?
packages=['hermes'], package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},
而且我的目录结构大致
hermes/ |
| docs/
| ...
| hermes/
|
| __init__.py
| code.py
| templates
|
| python.tpl
|
| README
| setup.py
的问题是,我需要在我的源代码,从模板目录中使用的文件代码,所以我可以写出python代码(这个项目是一个解析器生成器)。我似乎无法弄清楚如何正确包含和使用我的代码中的这些文件。有任何想法吗?
回答:
标准pkgutil module's get_data()
function将计算路径到您的数据,相对于你的包,并通过任何模块加载Python中导入hermes
包检索数据为您提供:
import pkgutil data = pkgutil.get_data('hermes', 'templates/python.tpl')
当然在某些情况下您可以使用从hermes.__file__
计算的路径读取数据,但是如果您打算分发项目,请考虑它可能以不同方式安装在最终用户的计算机上:作为普通文件,部署在压缩的蛋档案中等。在后一种情况下,您的hermes
模块将由Python使用zipimporter
导入,从而阻止y OU从做一个正常open(path).read()
:
>>> import hermes >>> hermes.__loader__
<zipimporter object "/home/pat/.cascade/virt/foo/lib/python2.6/site-packages/foo-0.0.0-py2.6.egg">
如果您能够接受的distribute
代码库增加一个运行时依赖,你可能想consdider看pkg_resources module
,它可以给你同样的结果,但增加了其他功能。
import pkg_resources data = pkg_resources.resource_string('hermes', 'templates/python.tpl')
以上是 如何从源代码使用package_data中的数据? 的全部内容, 来源链接: utcz.com/qa/257962.html