環境変数解析による Python YAML 構成

YAML設定ファイルを読み込み、環境変数を解決する

Python プロジェクトに取り組んだことがあるなら、おそらく設定を提供するためのさまざまな方法に遭遇したことがあるでしょう。ここではすべての方法を説明するつもりはありませんが、いくつか例を挙げます。

  • .ini ファイルの使用
  • Pythonクラスを使用する
  • .env ファイルの使用
  • JSONまたはXMLファイルを使用する
  • yamlファイルを使用する

私は通常、yaml 構成で作業することを好みます。これは非常に便利で使いやすいと思うからです。また、yaml ファイルは docker-compose 構成などでも使用されるため、ほとんどの人が使い慣れているものであることも気に入っています。

yaml 解析にはPyYAML Python ライブラリを使用します。

この記事では、yaml ファイルのケースについて説明し、具体的には、パスワード、ホスト、ユーザー名などの秘密をそのファイルに直接保存しないようにするにはどうすればよいかについて説明します。

次のような非常に単純な yaml ファイル構成の例があるとします。

database:
 name: database_name
 user: me
 password: very_secret_and_complex
 host: localhost
 port: 5432
ws:
 user: username
 password: very_secret_and_complex_too
 host: localhost

PyYAML が環境変数を解決できるようにするには、主に次の 3 つのものが必要です。

  • 環境変数を識別するための正規表現パターン、例:pattern = re.compile(‘.*?\${(\w+)}.*?’)
  • 解析する環境変数 (または複数の環境変数) があることを示すタグ (例: ) !ENV。
  • そして、ローダーが環境変数を解決するために使用する関数

環境変数を使用した YAML 構成の例:

database:
 name: database_name
 user: !ENV ${DB_USER}
 password: !ENV ${DB_PASS}
 host: !ENV ${DB_HOST}
 port: 5432
ws:
 user: !ENV ${WS_USER}
 password: !ENV ${WS_PASS}
 host: !ENV ‘https://${CURR_ENV}.ws.com.local'

ws:
 user: !ENV ${WS_USER}
 password: !ENV ${WS_PASS}
 host: !ENV 'https://${CURR_ENV}.ws.com.${MODE}'  # multiple env var

まず環境変数を設定します。たとえば、次のようになりますDB_PASS:

export DB_PASS=very_secret_and_complex

read -s ‘Database password: ‘ db_pass
export DB_PASS=$db_pass
    
      

python use_env_variables_in_config_example.py -c /path/to/yaml

コード内で、conf を使用して操作を行います。たとえば、次のようにしてデータベース パスワードにアクセスします。conf['database']['DB_PASS']

これがお役に立てば幸いです。ご意見、ご質問、訂正、ご提案などありましたら、ぜひお聞かせください :)

便利なリンク

提案された投稿

Langchain を使用して ChatGPT プラグインを無料で実行する方法

Langchain を使用して ChatGPT プラグインを無料で実行する方法

ブラウザ、コード インタープリターなどの新しい強力な ChatGPT プラグインについては聞いたことがあるはずです。しかし、問題があります。プラグインへのアクセスは待機リストに制限されているため、多くの人がアクセスできません。

私が最もよく使用するコーディング リソース

私が最もよく使用するコーディング リソース

今週、毎日のメールリストのメンバーからメールを受け取りました。彼らは次のことを知りたかったのです。毎日、毎週、毎月どのリソースにアクセスしていますか? 素晴らしい質問です!私のワークフローと使用している主なリソースについての洞察を共有したいと思います。

関連記事

安全な労働環境の構築

安全な労働環境の構築

「私が危険にさらされたとき、彼は私を守ってくれます。彼は私をテントの中に隠すでしょう。

危険な会話

危険な会話

私たちがこの地球上で繁栄し続けたいのであれば、危険な会話をしなければなりません。私たちがこれまでやってきたこと、現在行っていること、そして現在継続して行う予定の(または計画している)ことに挑戦するものです。

ジャーナル・アウトバート

ジャーナル・アウトバート

日記を開く: 1 日 1 枚の写真。私はいつも物語に魅了されてきました。

無限の命

大人になると、世界はそういうもので、あなたの人生はただ世界の中で生きていくだけで、決して命を危険にさらすことはなく、決められた道をたどって最後には死ぬだけで、失敗しないように努めるのだと言われがちです。壁を打ちすぎてはいけません。しかし、それは非常に限られた人生です。