web-dev-qa-db-fra.com

Lecture de variables d'environnement à partir d'un fichier d'environnement

Je voudrais exécuter dans un environnement local un script Python qui est normalement exécuté dans un conteneur Docker. Le docker-compose.yml spécifie un env_file qui ressemble (en partie) à ce qui suit:

DB_ADDR=rethinkdb
DB_PORT=28015
DB_NAME=ipercron

Pour que cela fonctionne localement, je voudrais que ces lignes soient converties en

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

Je pourrais écrire mon analyseur, mais je me demandais s’il existait des modules/outils existants pour lire les variables d’environnement à partir de fichiers de configuration.

27
Kurt Peek

Jetez un oeil à la python-dotenv

24
table

Vous pouvez utiliser ConfigParser . Vous trouverez un exemple d'exemple ici .

Mais cette bibliothèque s'attend à ce que vos données key = value soient présentes sous un certain [heading]. Par exemple, comme:

[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
9
Moinuddin Quadri

Utiliser seulement 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)
6
h0tw1r3

Cela pourrait aussi fonctionner pour vous:

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);

Dans les commentaires, vous trouverez différentes façons de sauvegarder les env. Vars et quelques options d’analyse, par exemple, pour vous débarrasser du mot clé export. Une autre solution consisterait à utiliser la bibliothèque python-dotenv . À votre santé.

3
radtek