アレッ*_*ックス 32 python settings configuration
存储Python脚本的应用程序机密(密码,访问令牌)的最简单方法是什么?我认为它是一个*.yml类似于Ruby 的文件,但令人惊讶的是我发现事实并非如此.那么它是什么呢?什么是最简单的解决方案?
我想将它们放在一个单独的文件中,因为这样我就不能将该文件推送到github存储库.
kec*_*cer 44
我认为将凭证存储在另一个*py文件中是最安全的选择.然后只需导入它.示例看起来像这样
config.py
username = "xy"
password = "abcd"
Run Code Online (Sandbox Code Playgroud)
main.py
import config
login(config.username, config.password)
Run Code Online (Sandbox Code Playgroud)
我处理的是完全相同的问题,实际上得到了与kecer建议的相同的解决方案。由于需要使用数十个脚本,因此我创建了自己的库。让我与您分享此解决方案。
credlib.py-处理凭证的通用库
class credential:
def __init__(self, hostname, username, password):
self.hostname = hostname
self.username = username
self.password = password
Run Code Online (Sandbox Code Playgroud)
mycredentials.py-我的本地文件,用于存储所有凭据
from credlib import credential
sys_prod = credential("srv01", "user", "pass")
sys_stg = credential("srv02", "user", "pass")
sys_db = credential("db01", "userdb", "passdb")
Run Code Online (Sandbox Code Playgroud)
mysystemlib.py-这是访问我的系统的通用库(同时支持新凭证系统和旧系统)
from credlib import credential
def system_login(*args): # this is new function definition
#def system_login(hostname, username, password): # this was previous function definition
if len(args) == 1 and isinstance(args[0], credential):
hostname = args[0].hostname
username = args[0].username
password = args[0].password
elif len(args) == 3:
hostname = args[0]
username = args[1]
password = args[2]
else:
raise ValueError('Invalid arguments')
do_login(hostname, username, password) # this is original system login call
Run Code Online (Sandbox Code Playgroud)
main.py-结合凭证和系统库的主脚本
from mycredentials import sys_stg, sys_db
import mysystemlib
...
mysystemlib.system_login(sys_stg)
Run Code Online (Sandbox Code Playgroud)
请注意,旧版主机名/用户名/密码方式仍然有效,因此不会影响旧脚本:
mysystemlib.system_login("srv02", "user", "pass")
Run Code Online (Sandbox Code Playgroud)
这有很多好处:
.gitignore),因此我们的python脚本/库可以与其他人共享而无需暴露凭据(每个人都在本地文件中定义自己的凭据)我个人更喜欢使用 yaml 文件和 pyyaml 库。此处的文档:https : //pyyaml.org/wiki/PyYAMLDocumentation
创建.gitignore规则非常快速且轻松,出错的可能性为零。您可以在类似 Linux / UNIX 的系统上添加带有 echo 的规则:
echo -e '*.yaml\n*.yml' >> .gitignore
Run Code Online (Sandbox Code Playgroud)
以下是从阅读器的同一文件夹/位置中的设置 .yaml 文件检索设置的示例。
代码片段:
#!/usr/bin/env python3
import yaml
from pathlib import Path
def get_settings():
full_file_path = Path(__file__).parent.joinpath('settings.yaml')
with open(full_file_path) as settings:
settings_data = yaml.load(settings, Loader=yaml.Loader)
return settings_data
Run Code Online (Sandbox Code Playgroud)