Альтернатива попытке сохранения переменных среды в Python - PullRequest
0 голосов
/ 05 марта 2020

До сих пор, когда бы мне ни понадобилось сохранить «секрет» для простого python приложения, я полагался на переменные среды. В Windows я устанавливаю переменные в диалоговом окне «Свойства компьютера» и получаю к ним доступ в своем коде Python следующим образом:

database_password = os.environ['DB_PASS']

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

#fetch a new token
token = oauth.fetch_token('https://api.example.com/oauth/v2/token', code=secretcode)
access_token = token['access_token']

#make sure it persists in the current session
os.environ['TOKEN'] = access_token

#store to the system environment (Windows)
cmd = 'SETX /M TOKEN ' + access_token
os.system(cmd)

Сегодня я быстро справляюсь с работой, но не похоже на правильный подход для добавления к моей панели инструментов. У кого-нибудь есть более элегантный способ делать то, что я пытаюсь сделать, не добавляя слишком много уровней сложности? Если бы решение работало на разных платформах, это было бы бонусом.

1 Ответ

0 голосов
/ 05 марта 2020

Я с большим успехом использовал модуль Python keyring . Это интерфейс для хранилищ учетных данных, предоставляемых операционной системой (например, Windows Диспетчер учетных данных). Я не использовал его на Linux, но, похоже, он также поддерживается.

Сохранение пароля / токена и последующее его получение может быть простым:

import keyring
keyring.set_password("system", "username", "password")
keyring.get_password("system", "username")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...