Чтение в переменных среды из файла среды

Я хотел бы запустить в локальной среде скрипт Python, который обычно выполняется в контейнере Docker. docker-compose.yml определяет env_file, который выглядит (частично) следующим образом:

DB_ADDR=rethinkdb
DB_PORT=28015
DB_NAME=ipercron

Для локального запуска я бы хотел, чтобы эти строки были преобразованы в

os.environ['DB_ADDR'] = 'rethinkdb'
os.environ['DB_PORT'] = '28015'
os.environ['DB_NAME'] = 'ipercron'

Я мог бы написать свой синтаксический анализатор, но мне было интересно, есть ли какие-нибудь существующие модули/инструменты для чтения переменных среды из конфигурационных файлов?

Ответ 2

Вы можете использовать ConfigParser. Пример примера можно найти здесь.

Но эта библиотека ожидает, что ваши данные key = value будут присутствовать в некоторых [heading]. Например, например:

[mysqld]
user = mysql  # Key with values
pid-file = /var/run/mysqld/mysqld.pid
skip-external-locking
old_passwords = 1
skip-bdb      # Key without value
skip-innodb

Ответ 3

Использование только python std

import re

envre = re.compile(r'''^([^\s=]+)=(?:[\s"']*)(.+?)(?:[\s"']*)$''')
result = {}
with open('/etc/os-release') as ins:
    for line in ins:
        match = envre.match(line)
        if match is not None:
            result[match.group(1)] = match.group(2)

Ответ 4

Это может также работать на вас:

env_vars = []
with open(env_file) as f:
    for line in f:
        if line.startswith('#'):
            continue
        # if 'export' not in line:
        #     continue
        # Remove leading 'export ', if you have those
        # then, split name / value pair
        # key, value = line.replace('export ', '', 1).strip().split('=', 1)
        key, value = line.strip().split('=', 1)
        # os.environ[key] = value  # Load to local environ
        env_vars.append({'name': key, 'value': value}) # Save to a list

print(env_vars);

В комментариях вы найдете несколько различных способов сохранить env vars, а также несколько вариантов синтаксического анализа, то есть избавиться от ключевого слова для export. Другой способ - использовать библиотеку python-dotenv. Приветствия.