尝试在 Python 中保留环境变量的替代方法
Alternative to attempting to persist Environment Variables in Python
到目前为止,每当我需要为一个简单的 python 应用程序存储 "secret" 时,我都依赖于环境变量。在 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)
它今天对我来说很快就完成了工作,但似乎不是添加到我的工具箱中的正确方法。有没有人有更优雅的方式来做我想做的事情而不会增加太多的复杂性?如果该解决方案跨平台工作,那将是一个奖励。
我使用 Python keyring 模块非常成功。它是操作系统提供的凭据保险库的接口(例如,Windows Credential Manager)。我没有在 Linux 上使用它,但它似乎也受支持。
存储 password/token 然后检索它可以像这样简单:
import keyring
keyring.set_password("system", "username", "password")
keyring.get_password("system", "username")
到目前为止,每当我需要为一个简单的 python 应用程序存储 "secret" 时,我都依赖于环境变量。在 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)
它今天对我来说很快就完成了工作,但似乎不是添加到我的工具箱中的正确方法。有没有人有更优雅的方式来做我想做的事情而不会增加太多的复杂性?如果该解决方案跨平台工作,那将是一个奖励。
我使用 Python keyring 模块非常成功。它是操作系统提供的凭据保险库的接口(例如,Windows Credential Manager)。我没有在 Linux 上使用它,但它似乎也受支持。
存储 password/token 然后检索它可以像这样简单:
import keyring
keyring.set_password("system", "username", "password")
keyring.get_password("system", "username")