Quelle est la façon la plus simple de stocker les secrets d'application (mots de passe, jetons d'accès) pour un script Python? Je pensais que ce serait un *.yml
fichier comme dans Ruby mais étonnamment j'ai trouvé que ce n'était pas le cas. Alors qu'est-ce que c'est alors? Quelles sont les solutions les plus simples?
Je veux les mettre dans un fichier séparé parce que de cette façon je serai incapable pour pousser ce fichier vers un dépôt github.
Je pense que le stockage des informations d'identification dans un autre fichier * py est votre pari le plus sûr. Il suffit ensuite de l'importer. L'exemple ressemblerait à ceci
config.py
username = "xy"
password = "abcd"
main.py
import config
login(config.username, config.password)
Je m'occupais exactement de la même question et je me suis finalement retrouvé avec la même solution que kecer suggérée. Comme je dois l'utiliser avec des dizaines de scripts, j'ai créé ma propre bibliothèque. Permettez-moi de partager cette solution avec vous.
credlib.py - bibliothèque universelle pour gérer les informations d'identification
class credential:
def __init__(self, hostname, username, password):
self.hostname = hostname
self.username = username
self.password = password
mycredentials.py - mon fichier local pour stocker toutes les informations d'identification
from credlib import credential
sys_prod = credential("srv01", "user", "pass")
sys_stg = credential("srv02", "user", "pass")
sys_db = credential("db01", "userdb", "passdb")
mysystemlib.py - il s'agit d'une bibliothèque générale pour accéder à mon système (le nouveau système d'informations d'identification et l'héritage sont pris en charge)
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 qui combine les informations d'identification et les bibliothèques système
from mycredentials import sys_stg, sys_db
import mysystemlib
...
mysystemlib.system_login(sys_stg)
Veuillez noter que la manière héritée de nom d'hôte/nom d'utilisateur/mot de passe fonctionne toujours afin qu'elle n'affecte pas les anciens scripts:
mysystemlib.system_login("srv02", "user", "pass")
Cela présente de nombreux avantages:
.gitignore
) afin que nos python puissent être partagés avec d'autres sans exposer les informations d'identification (chacun définit ses propres informations d'identification dans ses fichiers locaux)