Ответ 1
Взгляните на python-dotenv
Я хотел бы запустить в локальной среде скрипт 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'
Я мог бы написать свой синтаксический анализатор, но мне было интересно, есть ли какие-нибудь существующие модули/инструменты для чтения переменных среды из конфигурационных файлов?
Взгляните на python-dotenv
Вы можете использовать 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
Использование только 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)
Это может также работать на вас:
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. Приветствия.