结论

pkgutilpython 的内置模块,可以用来打开包内文件。

使用的时候如下:

1
2
3
4
5
6
import pkgutil

def foo():
data: bytes = pkgutil.get_data(__name__, 'file.txt')
content: str = data.decode('utf-8')
print(content)

如果你的函数需要一个文件,比如 PIL 打开图片,你可以用 io.BytesIO 来模拟,如下:

1
2
3
4
5
6
7
8
9
import io
import pkgutil

from PIL import Image


def bar():
fp = io.BytesIO(pkgutil.get_data(__name__, 'test.png'))
img = Image.open(fp)

配合 setup

如果说你想让这个包安装到 pip 里,那需要我们配置一下 setup.cfgsetup.py,可以参考这个链接:https://setuptools.pypa.io/en/latest/userguide/datafiles.html

就这样,拜拜。