2010-06-09 2 views
3

Je souhaite ouvrir un projet python open source sur Github mais il contient une clé API qui ne doit pas être distribuée.
Je suppose qu'il y a quelque chose de mieux que de retirer la clé chaque fois qu'un "push" est engagé dans le repo.Manière correcte de protéger une clé API privée lors de la version d'une application python sur un dépôt public git

Imaginez une procédure simplifiée foomodule.py:

import urllib2 
API_KEY = 'XXXXXXXXX' 
urllib2.urlopen("http://example.com/foo?id=123%s" % API_KEY).read() 

Ce que je pense est:

  1. Déplacez le api_key dans un second module key.py importer sur foomodule.py; Je voudrais ensuite ajouter key.py sur le fichier .gitignore.

  2. Identique à 1. mais en utilisant ConfigParser

Connaissez-vous une bonne façon programmatique pour gérer ce scénario?

Répondre

1

ont un modèle versionné key_template.py:

domain = 'example.com' 
API_KEY = 

Check it out à la machine locale, remplir les champs sensibles (tels que API_KEY), et sauf key.py. Ignorez key.py dans votre logiciel de contrôle de version. Ce n'est pas grave si vous le gardez dans des fichiers Python ou utilisez ConfigParser.

Une manière automatique pourrait être de fusionner automatiquement lors de la mise à jour avec le fichier existant key.py.

+0

Hum, je ne comprends pas; quel fichier clé importez-vous dans foomodule.py? – systempuntoout

+0

@system: 'key.py' – SilentGhost

+0

@Silent donc, checkout key.py avec la valeur vide, puis ignorer de contrôle de version? – systempuntoout

1

Une façon serait d'en faire une partie explicite de l'interface. Faites-en un argument pour vos constructeurs d'objets, par exemple. Ou demandez au client d'étendre votre classe et de fournir une méthode en renvoyant la clé. C'est nul quand il faut éditer votre module avant de pouvoir l'utiliser.

Questions connexes