如何为 PYPI 包进行持久存储

How to have persistent storage for a PYPI package

我有一个名为 collectiondbf 的 pypi 包,它通过用户输入的 API 密钥连接到 API。它在目录中用于下载文件,如下所示:

python -m collectiondbf [myargumentshere..]

我知道这应该是基础知识,但我真的卡在了这个问题上:

如何以有意义的方式保存用户给我的密钥,这样他们就不必每次都输入?

我想通过 config.json 文件来使用以下解决方案,但是如果我的包要移动目录,我怎么知道这个文件的位置?

这是我想使用它的方式,但显然它不会工作,因为工作目录会改变

import json
if user_inputed_keys:
    with open('config.json', 'w') as f:
        json.dump({'api_key': api_key}, f)

最常见的操作系统都有一个应用程序目录的概念,它属于在系统上拥有帐户的每个用户。该目录允许所述用户创建和读取,例如,配置文件和设置。

所以,你需要做的就是列出你想要支持的所有发行版,找出他们喜欢把用户应用程序文件放在哪里,然后有一个大的旧 if..elif..else 链来打开适当的目录。


或使用 appdirs,它已经完全做到了:

from pathlib import Path
import json
import appdirs

CONFIG_DIR = Path(appdirs.user_config_dir(appname='collectiondbf'))  # magic
CONFIG_DIR.mkdir(parents=True, exist_ok=True)

config = CONFIG_DIR / 'config.json'
if not config.exists():
  with config.open('w') as f:
    json.dumps(get_key_from_user(), f)
with config.open('r') as f:
  keys = json.load(f)  # now 'keys' can safely be imported from this module