在包内打开配置文件的Python方法

4 投票
1 回答
1407 浏览
提问于 2025-04-18 17:05

我正在尝试发布一个包含非Python文件的Python包。这个文件位于mypackage/config.yml,我也在manifest.in中添加了它(使用了recursive-include mypackage *.yml)。当我运行python setup.py install时,这个文件似乎被添加到了包里,但我不知道如何在代码中访问这个文件。使用open(os.path.join('mypackage', 'config.yml'))就会出问题,因为一旦我切换到其他目录,setup.py所在的目录就不再是当前目录了……

有没有什么方法可以安全地访问这个包里的文件,就像Java中的getResourceAsStream方法那样?

1 个回答

5

没错,你想要的东西在pkg_resources里。现在这个东西通常和setuptools一起使用,所以大家都在用。具体来说:

import pkg_resources
my_data = pkg_resources.resource_string(__name__, "config.yml")

请注意,这个返回的是字节数据。你甚至可以通过替换__name__来获取其他包里的资源。

撰写回答