有没有在Python中存储函数缓存文件的标准位置?

时间:2019-03-28 10:58:59

标签: python caching packaging memoization

我有执行大量昂贵计算的这些脚本。我所做的一种优化是评估网格上昂贵的功能,缓存网格并为网格内的调用进行插值。将文件写出到磁盘上很重要,这样以后的会话就可以从缓存中受益。当此脚本仅供个人使用时,我可以将缓存放在任何地方。现在,我想将其合并到包中以进行更广泛的分发,我发现我需要某种方式来知道将包的缓存文件存储在哪里?我只是需要做出一些决定,还是应该遵循一些程序(例如,让用户在安装时,运行时等修改目录)?

编辑:此代码还将具有基于插值其他来源数据的功能。因此,我也需要一个存储它们的地方,但是需要知道在哪里进行存储,以及如何检测特定安装的位置(在安装时进行了硬编码的内容,或者Python模块可以检测它们的位置)。在运行时重新安装?)。关键是,此位置需要以我理解不是的临时目录的方式保持不变。因此,理想的做法是在程序包的目录结构内部或用户主目录中的某个位置进行。如果在软件包的目录中,那么我必须以具有允许用户修改的目录的权限来进行欺骗的做法是可以接受的。

2 个答案:

答案 0 :(得分:1)

我有相同的要求。

似乎要走的路是存储到~/.cache/<appname>(Linux)。

要涵盖不同的操作系统,可以使用appdirs简化获得相似位置的操作,例如:

from appdirs import *
cachedir = user_cache_dir("<app name>") 

答案 1 :(得分:0)

我会考虑使用您的脚本可以识别的前缀创建一个named temporary file,以便可以在以后的会话中重新打开该文件。文件创建如下:

tempfile.NamedTemporaryFile(prefix='myApp', delete=False)

否则,我将默认使用当前工作目录,并提供一个选项,用于在运行时使用argparse设置文件夹。