GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

theskumar

python-dotenv – .envファイルの値を取得し、ローカルサーバーと本番サーバーで設定します。 🎉

投稿日:

.envファイルの値を取得し、ローカルサーバーと本番サーバーで設定します。 🎉
        _______ .__   __. ____    ____
       |   ____||  \ |  | \   \  /   /
       |  |__   |   \|  |  \   \/   /
       |   __|  |  . `  |   \      /
    __ |  |____ |  |\   |    \    /
   (__)|_______||__| \__|     \__/

python-dotenv |

.envファイルからキーと値のペアを読み取り、環境変数に追加します。 12ファクタの原則を使用して、開発中および運用中のアプリ設定を管理するのに最適です。

一つのことをやってください。

用途

最も簡単で最も一般的な使い方は、アプリケーションの起動時にload_dotenvを呼び出すことです。これは、現在のディレクトリ内の.envという名前のファイルか、その親か、または指定されたパスから環境変数をロードします。 その後、 os.getenv提供する環境関連のメソッドを呼び出すことができます。

.envは次のようになります。

# a comment and that will be ignored.
REDIS_ADDRESS=localhost:6379
MEANING_OF_LIFE=42
MULTILINE_VAR="hello\nworld"

必要に応じて、各行の先頭に「 export 」という単語を付けることができます。これにより、シェル上のファイル全体を簡単にソースすることができます。

.envは、POSIX変数展開を使用して変数を補間することができます。変数は環境から最初に置き換えられます。変数が環境に存在しない場合は、 .envファイル内の他の値から置き換えられます。 Note :デフォルト値展開はまだサポートされていません。 #30を参照してください)。

CONFIG_PATH=${HOME}/.config/foo
DOMAIN=example.org
EMAIL=admin@${DOMAIN}

入門

設定モジュールに沿って.envファイルを作成したと仮定します。

.
├── .env
└── settings.py

settings.py次のコードを追加してください

# settings.py
from dotenv import load_dotenv
load_dotenv()

# OR, the same with increased verbosity:
load_dotenv(verbose=True)

# OR, explicitly providing path to '.env'
from pathlib import Path  # python3 only
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)

この時点で、.envファイルの解析されたキー/値はシステム環境変数として存在し、 os.getenv()便利にアクセスできます。

# settings.py
import os
SECRET_KEY = os.getenv("EMAIL")
DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")

load_dotenvは、既存のシステム環境変数を上書きしません。 オーバーライドするには、 load_dotenv() override=Trueを渡しoverride=True

find_dotenv()メソッドは、(a) .envまたは作業ディレクトリをどこから使用するかを推測し、IPythonのノートブックやREPLなどの非ファイルコンテキストで動作するようにして、 .envファイルを検索しようとします。 (b)指定されたファイルを探すディレクトリツリーを歩いていきます – デフォルトでは.envと呼ばれます。

from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())

メモリ内ファイルライク

他のソース(例えば、ネットワークストレージ)からのファイルライグを解析するために、ファイルシステムに依存することはできません。 load_dotenvdotenv_valuesはファイル形式のstream受け入れstream 合格する前に巻き戻してください。

>>> from io import StringIO     # Python2: from StringIO import StringIO
>>> from dotenv import dotenv_values
>>> filelike = StringIO('SPAM=EGSS\n')
>>> filelike.seek(0)
>>> parsed = dotenv_values(stream=filelike)
>>> parsed['SPAM']
'EGSS'

返される値は、キー値のペアを持つ辞書です。

dotenv_values消費する必要があるが、システム環境に直接適用しない場合は、dotenv_valuesが役に立ちます。

ジャンゴ

djangoを使用している場合は、上記のローダスクリプトをwsgi.pymanage.py先頭に追加する必要があります。

インストール

pip install -U python-dotenv

iPythonのサポート

iPythonでdotenvを使うことができます。 dotenvに%dotenvで.envを検索させるか、.envファイルへのパスを明示的に指定することができます。以下では用途を参照してください。

%load_ext dotenv

# Use find_dotenv to locate the file
%dotenv

# Specify a particular file
%dotenv relative/or/absolute/path/to/.env

# Use '-o' to indicate override of existing variables
%dotenv -o

# Use '-v' to turn verbose mode on
%dotenv -v

コマンドラインインターフェイス

コマンドラインをサポートするには、インストール時にcliオプションを使用します。

pip install -U "python-dotenv[cli]"

.envファイルを手動で開くことなく操作するのに役立つ、cliインターフェイスのdotenvも含まれています。 リモートマシンにインストールされた同じCLI(後述)を使用すると、リモートサーバー上の設定を更新することができます。

Usage: dotenv [OPTIONS] COMMAND [ARGS]...

  This script is used to set, get or unset values from a .env file.

Options:
  -f, --file PATH                 Location of the .env file, defaults to .env
                                  file in current working directory.
  -q, --quote [always|never|auto]
                                  Whether to quote or not the variable values.
                                  Default mode is always. This does not affect
                                  parsing.
  --help                          Show this message and exit.

Commands:
  get    Retrive the value for the given key.
  list   Display all the stored key/value.
  run    Run command with environment variables from .env file present
  set    Store the given key/value.
  unset  Removes the given key.

リモートサーバーでの設定の設定

我々はこれを実現するために優れたファブリックを使用します。 ローカルのfabfileにconfigタスクを追加しますdotenv_pathは、リモートサーバー上の.envファイルの絶対パスの.envです。

# fabfile.py

import dotenv
from fabric.api import task, run, env

# absolute path to the location of .env on remote server.
env.dotenv_path = '/opt/myapp/.env'

@task
def config(action=None, key=None, value=None):
    '''Manage project configuration via .env

    e.g: fab config:set,<key>,<value>
         fab config:get,<key>
         fab config:unset,<key>
         fab config:list
    '''
    run('touch %(dotenv_path)s' % env)
    command = dotenv.get_cli_string(env.dotenv_path, action, key, value)
    run(command)

使い方はheroku config apiを非常に密接に反映するように設計されています。

fab configすべてのリモート設定情報を取得する

$ fab config
foo="bar"

fab config:set,<key>,<value>リモート設定変数をfab config:set,<key>,<value>

$ fab config:set,hello,world

fab config:get,<key>して単一のリモート設定変数を取得するfab config:get,<key>

$ fab config:get,hello

fab config:unset,<key>を使用してリモート設定変数を削除するfab config:unset,<key>

$ fab config:unset,hello

このプロジェクトには1ビットではなく、ファブリック全体のおかげでfab config:set,<key1>,<value1> config:set,<key2>,<value2>

$ fab config:set,hello,world config:set,foo,bar config:set,fizz=buzz

関連プロジェクト

貢献する

すべての寄付は大歓迎です! 問題を開いたり、プルリクエストを送信してください。

このプロジェクトは現在Saurabh Kumar_によって維持されており、これらの素晴らしい人々の支援なしには実現できませんでした。

テストの実行:

$ flake8
$ pytest

変更ログ

0.8.1

  • ドキュメントのテストを追加する( @Flimm
  • ‘cli’サポートをオプションにします。 pip install python-dotenv[cli]使用してください。 @チェクマール

0.8.0

  • set_keyunset_keyは、ファイルの解析と書き換えではなく、影響を受けたファイルの変更のみをset_key 、コメントやその他のファイルはそのまま引き継ぎます。
  • ライン内のexportプレフィックスのサポートを追加します。
  • 内部屈折( @theskumar
  • load_dotenvdotenv_valuesStringIO())@alanjds )( @theskumar )( #78 )で動作させる

0.7.1

  • iPythonのハード依存関係を削除する( @theskumar

0.7.0

  • .envを介してシステム環境変数をオーバーライドするためのサポートを追加します。 @ミロモンロッド )( #63
  • デフォルトでは “.env not found”警告を無効にする( @maxkoryukov )( #57

0.6.5

  • 特殊文字\サポートを追加する。 @pjona )( #60

0.6.4

  • 一重引用符( @Flimm )の問題を修正しました( #52

0.6.3

  • setup.pyでユニコード例外を処理する( #46

0.6.2

0.6.0

  • Python 2.6のサポートを無効にする
  • エスケープされた文字や改行を引用符で囲んだ値で扱います。 (ありがとう@iameugenejo
  • 引用符で囲まれていないキー/値の周囲のスペースをすべて削除します。 (ありがとう@paulochf
  • POSIX変数の拡張を追加しました。 (ありがとう@hugochinchilla

0.5.1

  • find_dotenvを修正 – この関数が呼び出されたファイルから検索を開始するようになりました。

0.5.0

  • .envファイルを検索しようとするfind_dotenvメソッドを追加します。 (Thanks @isms

0.4.0

  • cli: .env値を引用符で囲む動作を制御する-q/--quoteオプションを追加しました。 (ありがとう@hugochinchilla )。
  • 改善されたテストカバレッジ。







-theskumar
-, , , , ,

執筆者:

theskumar

python-dotenv – .envファイルの値を取得し、ローカルサーバーと本番サーバーで設定します。 🎉

投稿日:

(さらに…)







-theskumar
-, , , , ,

執筆者: