包中的Python pkg_resources和文件访问权限

时间:2017-12-14 16:22:50

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

我正在构建我的第一个python包(然后我用pip安装),我需要使用一些非python文件。在these answers中,我解释说我应该使用pkg_resources函数。但我无法弄清楚一个有效的例子。假设我有这个项目结构:

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

现在,我想从conf.yml访问image.pngfile.py。我该怎么做:

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

1 个答案:

答案 0 :(得分:2)

访问这些文件的最简单方法是包含在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文件指定目录的。

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

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