Sco*_*ott 33 python distutils build setuptools distribute
在setup.py中,我已经指定了package_data,如下所示:
packages=['hermes'],
package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},
Run Code Online (Sandbox Code Playgroud)
我的目录结构粗略
hermes/
|
| docs/
| ...
| hermes/
|
| __init__.py
| code.py
| templates
|
| python.tpl
|
| README
| setup.py
Run Code Online (Sandbox Code Playgroud)
问题是我需要在源代码中使用templates目录中的文件,这样我就可以写出python代码(这个项目是一个解析器生成器).我似乎无法弄清楚如何正确地包含和使用我的代码中的这些文件.有任何想法吗?
sam*_*ias 38
标准的pkgutil模块的get_data()函数将计算数据的路径,相对于包,并通过Python用于导入hermes包的任何模块加载器为您检索数据:
import pkgutil
data = pkgutil.get_data('hermes', 'templates/python.tpl')
Run Code Online (Sandbox Code Playgroud)
当然,在某些情况下,您可以使用从中计算的路径读取数据hermes.__file__,但是如果您计划分发项目,请考虑在最终用户的计算机上以不同的方式安装它:作为普通文件,部署在压缩的鸡蛋中在后一种情况下,您的hermes模块将由Python使用a导入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">
Run Code Online (Sandbox Code Playgroud)
如果您可以在distribute代码库上添加运行时依赖项,那么您可能需要查看pkg_resources module,这可以为您提供相同的结果,但添加了其他功能.
import pkg_resources
data = pkg_resources.resource_string('hermes', 'templates/python.tpl')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9850 次 |
| 最近记录: |