Как иметь постоянное хранилище для пакета PYPI - PullRequest
6 голосов
/ 26 февраля 2020

У меня есть пакет pypi с именем collectiondbf , который подключается к API с помощью введенного пользователем ключа API. Он используется в каталоге для загрузки файлов следующим образом:

python -m collectiondbf [myargumentshere..]

Я знаю, что это должно быть базовое c знание, но я действительно застрял в вопросе:

Как я могу сохранить ключи, которые пользователи дают мне осмысленно, чтобы им не приходилось вводить их каждый раз?

Я хотел бы использовать следующее решение с использованием файла config.json, но как я узнаю местоположение этого файла, если мой пакет будет?

Вот как я хотел бы использовать его, но, очевидно, он не будет работать, так как рабочий каталог изменится

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

1 Ответ

5 голосов
/ 26 февраля 2020

В большинстве распространенных операционных систем есть концепция каталога приложений, который принадлежит каждому пользователю, имеющему учетную запись в системе. Этот каталог позволяет указанному пользователю создавать и читать, например, файлы конфигурации и настройки.

Итак, все, что вам нужно сделать, это составить список всех дистрибутивов, которые вы хотите поддерживать, выяснить, где им нравится поместите файлы пользовательских приложений и используйте большую старую цепочку 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
...