Python包的数据缓存

4 投票
2 回答
571 浏览
提问于 2025-04-15 16:50

我有一个Python模块,它会生成一些很大的数据文件,我想把这些文件缓存到硬盘上,以便以后使用。对于普通用户来说,这个缓存可能会占用几百MB的空间,但能节省很多计算时间。

这些文件并不是和模块一起分发的,而是在第一次用特定参数运行代码时生成的。

到目前为止,我只是自己用一个单文件模块,把文件放在一个固定的路径下(data/)。但现在我需要把这个模块打包成Python包,使用distutils来分发,所以我在想有没有标准的方法来做到这一点。

我在考虑类似于scipy.weave的编译缓存,但我想知道有没有更现代的支持方式。在*nix系统上,我希望它能放在~/.something这个路径下,但我不确定Windows上对应的路径是什么。此外,这个设置应该是可配置的,以便用户可以把它指向其他地方,或者让多个用户共享缓存目录。这样的配置文件应该怎么工作?放在哪里比较合适?

或者我应该把它作为一个安装选项,放在setup.py旁边的配置文件中,或者通过手动编辑setup.py来设置,然后在安装前把目录硬编码到模块里?

任何建议都非常感谢...

2 个回答

2

在自由操作系统的世界里,有一个新兴的标准:http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

这个模块可以帮助你在Windows和Mac OS X上使用,但它似乎在遵循XDG基础目录规范方面存在问题:http://pypi.python.org/pypi/appdirs

3

你可以使用标准库中的 ConfigParser 模块来读取 ini 文件(或者根据你的习惯,也可以是 .rc 文件)。要找到这个文件,os.path.expanduser 是一个很有用的函数,它可以在所有平台上正确处理像 "~/.mytoolrc" 这样的路径。如果你想让用户能够自定义文件的位置,可以通过 os.environ 使用环境变量来实现。

撰写回答