Вызовите envvars изнутри Python - PullRequest
0 голосов
/ 19 октября 2019

В моем файле django settings.py я бы хотел вызвать файл envvars.sh для импорта таких вещей, как DB_CREDENTIALS. Я пытаюсь сделать что-то вроде этого:

if not os.environ.get('DB_PASSWORD'): 
    subprocess.call(['source', 'envvars.sh'])

DB_PASSWORD         = os.environ.get('DB_PASSWORD', '')

Он работает с терминала, делает $ source envvars.sh, но не из Python. Есть ли другой способ сделать это?

1 Ответ

1 голос
/ 19 октября 2019

Вы не можете сделать это, как вы описали здесь. Но, возможно, было бы лучше сделать шаг назад и спросить, почему вы это делаете?

Поскольку вы использовали тег Django, можем ли мы предположить, что вы запускаете приложение Django из какого-то другого процесса (дляНапример, приложение Apache WSGI)? Затем, в качестве примера, вы просто определили бы эти переменные в / etc / apache2 / envvars, чтобы они были доступны процессу Apache (и, следовательно, этот код в приложении Django). Аналогично, определение ваших переменных в / etc / environment может принести вам пользу. Это зависит только от структуры вызова / развертывания вашего приложения.

Кроме того, сохраняем ваши переменные в файле .env и читаем это (вместо того, чтобы делать subpprocess вызов скрипта Shell, который нене безопасно) использование модуля типа django-dotenv и выполнение чего-то вроде:

if not os.environ.get('DB_PASSWORD'): 
    import dotenv
    dotenv.read_dotenv(os.path.join(os.path.dirname(__file__), ".env"), True)

DB_PASSWORD = os.environ.get('DB_PASSWORD', '')

также будет хорошим подходом. Если вы используете Django, вы можете инициализировать его в файле settings.py в среде dev.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...