我正在构建我的第一个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.png
和file.py
。我该怎么做:
答案 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文件指定目录的。
此解决方案也不考虑您可能要排除的相同扩展名的文件,但可以通过排除或指定文件名而不是使用星号来轻松处理这些文件。
我知道有些问题很容易被认为是重复的问题,但我也很难找到一个可行的例子,经过一段时间的捣乱,我设法得到一些工作,就是这样。