2012-01-11 23 views
5

Pythonプログラムにさまざまな設定や構成を動的にインポートしたいのですが、これは通常は.iniファイルなどで行います。Pythonプログラムの設定言語としてPythonを使用する

設定ファイルの構文でJSONを使い始めてから、YAMLに移動しましたが、本当にPythonを使いたいと思います。これはフォーマットの数を最小限に抑え、設定ファイルでコードを使用できるようにします。これは便利です。

私は次のようになり、この使用してコード許可する__import__ベースのシステムをハッキング:

account_config = __import__(settings.CONFIG_DIR + '.account_name', fromlist=[settings.CONFIG_DIR]) 

それは基本的に作品を、私は難解な問題のすべての種類に実行している - など。私が "テスト"をインポートしようとすると、テストの代わりにPythonのパスにある内部のPythonライブラリが選択されます。

私は疑問に思っています:実行可能なpythonプログラムの設定言語としてpythonを使用していますか、問題を尋ねていますか?私が盗むことのできる例はありますか?

+3

Djangoプロジェクトはこれをほぼ正確に行います。それは一般的です。いい考えだね。ちょうど良い名前を選んでください。ライブラリには、使用できない名前がいっぱいです。しかし、ライブラリに**ない**という名前はほとんど無数にあります。 –

+0

ありがとうございましたS.Lott。私はすぐに "テスト"の問題に遭遇したので、私を怖がってしまいました。私は、プロダクションでデバッグの悪夢を引き起こすランダムな名前の衝突があると懸念しています。 – Parand

+0

「ランダム」ではありません。それらは、図書館のドキュメントに詳しく書かれています。 –

答えて

6

これは簡単な方法です。

設定ファイルは大域変数を割り当てます。あなたはこの

settings = {} 
execfile('the_config.py', settings) 
settings['CONFIG'] == "some string" 

のようにすべてのこれらの設定をインポートする使用

CONFIG = "some string" 
ANOTHER = [ "some", "list" ] 
MORE = "another value" 

今すぐあなたの設定の辞書が設定されたグローバル変数のすべてを持っています。

+0

あなたのコメントは、私が受け入れたいと思った答えでした。私は上のインポートモデルに行くことになった。 – Parand

5

は、pythonプログラムの設定言語としてpythonを使用していますか、それとも問題がありますか?

依存; OSインターフェイスでチューリング完全な設定ファイルフォーマットを取得していることに気づくでしょう。セキュリティ上の問題が発生する可能性があるので、信頼できないソースの設定ファイルではこれを行わないでください。

OTOHの場合、この設定は非常にとなる場合があります。

私は盗むことができる例はありますか?

Django

+0

IPythonもこれを行います。 –

関連する問題