なぜ非常に多くのアプリ/フレームワークが構成ファイルを未実行形式で保持するのですか?
-
10-07-2019 - |
質問
多くのフレームワークは、構成ファイルをプログラムの他の部分とは異なる言語で保持しています。たとえば、Appengineは設定をyaml形式で保持します。比較すると、DJango settings.pyはpythonモジュールです。これには多くの欠点があります。
プログラムの他の部分と同じ言語であれば、次のことができます
設定ファイルで興味深いことを行います。
MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
#Or whaever the correct cals are, you get the idea.
- 新しい(明らかに軽量な)フォーマットを学ぶ必要はありません
- 私のツールは期待通りに動作します。
-
import conf
などを実行できます。
C / C ++などのようなヘビーウェイト言語であれば利点がわかりますが、Pythonの場合はなぜ理にかなっています。利点を追加せずに電力を奪うようなものです。
解決
一部のフレームワーク設計者は、構成ファイルが重いロジックにとって不適切な場所であると感じています。 MVCフレームワークによって、所属していないロジックを配置できないように、構成ファイルによって、所属していないプログラミングを配置できません。
それは好みと哲学の問題です。
とはいえ、私はDjangoの方法を好みます。
他のヒント
Pythonが常にappengineを実行する唯一の言語であるとは限りません。 したがって、同じyaml設定ファイルは、たとえばjavaやperlで記述されたappengineアプリを駆動できます
自動/ GUIツールを使用して、構成ファイルを解析および/または生成および/または変更する必要がある場合があります。 conffileがpythonスクリプトの場合、これは簡単ではありません。
非常に正当な理由があります:プログラムがユーザーのコンピューターのような安全でない環境で配布されている場合、簡単に変更できるテキストファイルを実行すると、多くのウイルスが侵入する可能性があります。これは、アプリケーションがサーバー上でホストされるdjangoアプリケーションの場合にはあまり当てはまりません-安全な環境です。しかし、py2exeを使用してWindows上に配布されたアプリケーションでは、プログラムにランダムなものを実行させないでください。
YAMLのような構文を使用するもう1つの理由は、他のツールを使用してファイルを操作できることです。他の言語であっても、フォーマットは移植可能であり、十分に文書化されています。
とはいえ、Pythonプログラムで設定ファイルが必要なときは、いくつかのセキュリティ対策を施したPython辞書を使用します:
- 囲んでいる{}を削除して、Python式に直接評価されないようにします
- safe_eval を使用して実行可能アイテムを破棄します。
おそらく、彼らにそれができるとは思わなかったでしょう。多くのプログラマーは、スクリプト言語が遅く、プログラミング言語ほど単純ではない昔からです(Unixシェルのようなものを見てください)。気の利いた動的言語が登場すると、「テキストのみの構成ファイル」に固執しました。それが彼らがいつもやったことだからです。