gpt4 book ai didi

python - 如何从源代码中使用 package_data 中的数据?

转载 作者:IT老高 更新时间:2023-10-28 11:10:07 26 4
gpt4 key购买 nike

在 setup.py 中,我这样指定 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__ 计算的路径读取数据,但如果您计划分发您的项目,请考虑它可能以不同的方式安装在最终用户的机器:作为普通文件,部署在压缩的 egg 存档中等。在后一种情况下,您的 hermes 模块将由 Python 使用 zipimporter 导入,从而防止你从做一个正常的 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 代码库上添加运行时依赖项,您可能需要考虑查看 pkg_resources module ,它可以为您提供相同的结果,但增加了其他功能。

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

关于python - 如何从源代码中使用 package_data 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com