如何使用源代码中的 package_data 中的数据?
在 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
问题是我需要使用源代码中的 templates 目录中的文件,以便我可以编写 python 代码(该项目是一个解析器生成器) 。我似乎无法弄清楚如何从我的代码中正确包含和使用这些文件。有什么想法吗?
In setup.py, I have specified package_data like this:
packages=['hermes'],
package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},
And my directory structure is roughly
hermes/
|
| docs/
| ...
| hermes/
|
| __init__.py
| code.py
| templates
|
| python.tpl
|
| README
| setup.py
The problem is that I need to use files from the templates directory in my source code so I can write out python code (this project is a parser generator). I can't seem to figure out how to properly include and use these files from my code. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
标准 pkgutil 模块的
get_data()
函数将计算数据相对于包的路径,并通过 Python 用于导入 Hermes 包的任何模块加载器检索数据:当然,在某些情况下,您可以使用以下命令读取数据 :从
hermes.__file__
计算出的路径,但如果您计划分发您的项目,请考虑它可能以不同的方式安装在最终用户的计算机上:作为纯文件,部署在压缩的 Egg 存档中,在后一种情况下,您的hermes
模块将由 Python 使用zipimporter
导入,从而阻止您执行正常的open(path).read( )
:如果您愿意在
distribute
代码库上添加运行时依赖项,您可能需要考虑查看pkg_resources 模块
,它可以为您提供相同的结果,但增加了其他功能。The standard pkgutil module's
get_data()
function will calculate the path to your data, relative to your package, and retrieve the data for you via whatever module loader Python used to import thehermes
package:Of course in certain cases you could just read your data using a path calculated from
hermes.__file__
, but if you plan to distribute your project, consider that it may be installed in different ways on the end user's machine: as plain files, deployed in a zipped egg archive, etc. In the latter case, yourhermes
module will have been imported by Python using azipimporter
, preventing you from doing a normalopen(path).read()
:If you're okay with adding a runtime dependency on the
distribute
codebase, you may want to consider looking at thepkg_resources module
, which can give you the same result but adds other capabilities.