【问题标题】:Python pkg_resources and file access in packagesPython pkg_resources 和包中的文件访问
【发布时间】:2018-05-28 19:32:02
【问题描述】:

我正在构建我的第一个 python 包(然后我使用 pip 安装它),我需要使用一些非 python 文件。在these answers 中说明我应该使用pkg_resources 函数。但我想不出一个可行的例子。假设我有这个项目结构:

package_name/
----data/
--------image.png
----package_name/
--------__init__.py
--------file.py  
----setup.py
----MANIFEST.in
----conf.yml

现在我想从file.py 访问conf.ymlimage.png。我应该如何进行:

  • file.py ?
  • setup.py ?
  • MANIFEST.in ?

【问题讨论】:

标签: python-3.x pip package setup.py pkg-resources


【解决方案1】:

访问这些文件的最简单方法是包含在 MANIFEST.in 中

global-include *.png
global-include *.yml

MANIFEST.in 将只使用源代码分发的文件,而 setup.py 将包含二进制/轮子分发的文件,所以为了安全起见,在 setup.py 中

include_package_data = True,
package_data = {
'' : ['*.png'],
'' : ['*.yml'],
}

然后你可以像这样从 file.py 引用特定的文件

from pkg_resources import resource_string


 def foo():
     pngfile = resource_string(__name__, 'data/image.png')
     ymlfile = resource_string(__name__, 'conf.yml')

注意我如何为 png 文件指定目录。

此解决方案也不考虑您可能要排除的具有相同扩展名的文件,但可以通过排除或指定文件名而不是使用星号轻松处理这些文件。

我知道有些问题很容易被认为是重复的,但我也很难找到一个可行的例子,经过一段时间的自我纠缠后,我设法得到了一些工作,就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2018-05-20
    • 2018-04-14
    • 2014-07-04
    • 2013-03-08
    • 2019-04-13
    相关资源
    最近更新 更多