首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在package_data中使用源代码中的数据?

如何在package_data中使用源代码中的数据?
EN

Stack Overflow用户
提问于 2011-05-05 20:31:05
回答 1查看 12.6K关注 0票数 36

在setup.py中,我像这样指定了package_data:

代码语言:javascript
复制
packages=['hermes'],
package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},

我的目录结构大致是

代码语言:javascript
复制
hermes/
 |
 | docs/
 | ...
 | hermes/
    | 
    | __init__.py
    | code.py
    | templates
        |
        | python.tpl
 |
 | README
 | setup.py

问题是我需要在源代码中使用模板目录中的文件,这样我才能写出python代码(这个项目是一个解析器生成器)。我似乎不知道如何在我的代码中正确地包含和使用这些文件。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-05 22:43:32

标准pkgutil module's get_data() function将计算数据相对于包的路径,并通过Python用于导入hermes包的任何模块加载器为您检索数据:

代码语言:javascript
复制
import pkgutil
data = pkgutil.get_data('hermes', 'templates/python.tpl')

当然,在某些情况下,您可以使用从hermes.__file__计算出的路径读取数据,但如果您计划分发项目,请考虑在最终用户的计算机上以不同的方式安装它:作为纯文件,部署在压缩的鸡蛋归档中,等等。在后一种情况下,您的hermes模块将由Python使用zipimporter导入,从而阻止您执行普通的open(path).read()

代码语言:javascript
复制
>>> import hermes
>>> hermes.__loader__
<zipimporter object "/home/pat/.cascade/virt/foo/lib/python2.6/site-packages/foo-0.0.0-py2.6.egg">

如果您可以在distribute代码库上添加运行时依赖项,则可以考虑查看pkg_resources module,它可以提供相同的结果,但会添加其他功能。

代码语言:javascript
复制
import pkg_resources
data = pkg_resources.resource_string('hermes', 'templates/python.tpl')
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5897666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档