practices management files externalize best python configuration settings

python - management - Almacenar los secretos(contraseñas) en un archivo separado



use config file python (2)

¿Cuál es la forma más sencilla de almacenar los secretos de la aplicación (contraseñas, tokens de acceso) para un script de Python? Pensé que sería un archivo *.yml como en Ruby pero sorprendentemente descubrí que no era el caso. Entonces, que es? ¿Cuáles son las soluciones más simples?

Quiero ponerlos en un archivo separado porque de esa manera no podré enviar ese archivo a un repositorio de github.


Creo que almacenar las credenciales dentro de otro archivo * py es tu apuesta más segura. Entonces simplemente importarlo. Ejemplo se vería así

config.py

username = "xy" password = "abcd"

main.py

import config login(config.username, config.password)


Estaba tratando exactamente la misma pregunta y, de hecho, terminé con la misma solución que sugirió kecer . Ya que necesito usar docenas de scripts, he creado una biblioteca propia. Déjame compartir esta solución contigo.

credlib.py - biblioteca universal para manejar credenciales

class credential: def __init__(self, hostname, username, password): self.hostname = hostname self.username = username self.password = password

mycredentials.py - mi archivo local para almacenar todas las credenciales

from credlib import credential sys_prod = credential("srv01", "user", "pass") sys_stg = credential("srv02", "user", "pass") sys_db = credential("db01", "userdb", "passdb")

mysystemlib.py : esta es una biblioteca general para acceder a mi sistema (tanto el nuevo sistema de credenciales como el legado son compatibles)

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

main.py - script principal que combina credenciales y librerías del sistema

from mycredentials import sys_stg, sys_db import mysystemlib ... mysystemlib.system_login(sys_stg)

Tenga en cuenta que la forma heredada de nombre de host / nombre de usuario / contraseña todavía funciona, por lo que no afecta a los scripts antiguos:

mysystemlib.system_login("srv02", "user", "pass")

Esto tiene muchos beneficios:

  • El mismo sistema de credenciales en todos nuestros scripts de Python
  • Los archivos con contraseñas están separados (los archivos pueden tener permisos más estrictos)
  • los archivos no se almacenan en nuestros repositorios git (excluidos a través de .gitignore ), por lo que nuestros scripts / libs de python se pueden compartir con otros sin exponer credenciales (todos definen sus propias credenciales en sus archivos locales)
  • Si es necesario cambiar una contraseña, lo hacemos en un solo lugar.