当前位置: 首页 > 面试题库 >

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

司徒俊良
2023-03-14
问题内容

在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模块的get_data()功能将计算相对于包的数据路径,并通过用于导入hermes包的Python模块加载器为您检索数据:

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

当然,在某些情况下,您可以使用从计算出的路径读取数据hermes.__file__,但是如果您打算分发项目,请考虑将其以不同的方式安装在最终用户的计算机上:作为纯文件,以压缩的鸡蛋形式部署档案等。在后一种情况下,您的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代码库上html" target="_blank">添加运行时依赖关系,则可以考虑考虑pkg_resources module,虽然可以提供相同的结果,但还可以添加其他功能。

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


 类似资料:
  • 例如,我可以获得开始行和结束行,但是如何获得开始行和结束行之间的源代码呢。下面是示例代码。 我想得到下面的代码,这是与cmds相关的定义。

  • 源代码控制系统(又称版本控制系统)让你高效地管理工程。他们对一个人是很有用的,对一个团队是至关重要的。它们追踪不同版本里的所有改变,以至于所有代码都未曾丢失,其含义可以归属于改变。有了源代码控制系统,一个人可以自信地写一些而半途而废的代码和调试的代码,因为你修改的代码被仔细地与提交的、官方的即将与团队共享或发布的代码分割开。 我挺晚才开始意识到源代码控制系统的好处,但现在即使是一个人的工程,我也不

  • 这个问题的目的是记录: > 在PySpark中使用JDBC连接读写数据所需的步骤 JDBC源代码和已知解决方案可能存在的问题 只要稍作改动,这些方法就可以与其他受支持的语言(包括Scala和R)一起使用。

  • 这是我使用jsp和jstl的代码: 如何使用Thymeleaf进行同样的操作?以下代码无效: 当我不发表评论时,会在页面上显示消息: 无法访问URL:http://localhost:8080/blog-spring-thymeleaf/auth/login 异常:org.springframework.web.servlet.NoHandlerFoundException:找不到GET /blo

  • 我想看看一个函数的源代码,看看它是如何工作的。我知道我可以通过在提示符下键入函数名称来打印函数: 在这种情况下,是什么意思?如何找到实际使用的源代码,例如:? 如何查找和等函数? 在另一些情况下,有一些R代码,但大部分工作似乎是在其他地方完成的。 如何找到函数的功能?类似地,某些函数调用、、、或。我怎样才能找到这些的源代码?

  • 问题内容: 使用Eclipse,我想查看核心Java类(Eg )的源代码,但是当我使用“打开声明”导航到源代码时,它显示“未找到源代码”,并提供了附加源代码的选项。 我的问题是;我如何附加来源?我从哪里获得库的源.jar ? 问题答案: 您需要安装JDK。那你可以看看 对我来说(取决于您当前的版本) 您无需获取特殊的开源版本。