在包内打开配置文件的Python方法
我正在尝试发布一个包含非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__
来获取其他包里的资源。