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

2024-06-06 11:40:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在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代码(这个项目是一个解析器生成器)。我似乎无法从代码中正确地包含和使用这些文件。有什么想法吗?


Tags: 文件数据代码py目录docspackagedata
1条回答
网友
1楼 · 发布于 2024-06-06 11:40:11

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

import pkgutil
data = pkgutil.get_data('hermes', 'templates/python.tpl')

当然,在某些情况下,您可以使用从hermes.__file__计算的路径读取数据,但是如果您计划分发项目,请考虑它可能以不同的方式安装在最终用户的计算机上:作为普通文件,部署在压缩的egg存档中,等等,在后一种情况下,Python将使用zipimporter导入您的hermes模块,从而阻止您执行正常的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查看^{},它可以提供相同的结果,但会添加其他功能。

import pkg_resources
data = pkg_resources.resource_string('hermes', 'templates/python.tpl')

相关问题 更多 >