Зарегистрируйте настраиваемые переменные среды с помощью anaconda - PullRequest
0 голосов
/ 28 декабря 2018

Запустив conda env export > environment.yml, я могу упростить клонирование и репликацию моего окружения.

Но мне также нужно, чтобы они задавали некоторые переменные окружения.При использовании PHP (Laravel) у меня был файл .env (игнорируемый git), в который пользователь мог поместить данные учетной записи, пароли, токены и т. Д. Был предоставлен файл .env.example, позволяющий пользователю видеть требуемые значения.Так что я реализовал это с помощью класса python, но он был осужден в r / learnpython («... чтобы дать пользователю возможность повеситься»).

После дальнейшего чтения я сделал файл activateв моем проекте root

export \
    GITHUB_ACCESS_TOKEN="your value goes here", 
    BENNO="test",

Таким образом, пользователь теперь просто запускает source activate для регистрации переменных.Но я вижу несколько проблем

  • activate зафиксировано, как защитить пользователя от случайной публикации этого?
  • После выхода из моей среды conda переменная GITHUB_ACCESS_TOKEN все еще была активна,Я ожидал, что среда conda сохранит отдельный набор переменных среды?
  • Пользователь должен запускать сценарий активации каждый раз, когда он перезапускает терминал
  • Сценарий активации не поддерживает использование Windows
  • Принцип все тот же, что и .env.example в PHP, что плохо ??

Подводя итог, я хотел бы получить простой простой способ хранения как зависимостей, так и настраиваемых переменных среды., что делает возможной простую установку для пользователей conda, но также и, если возможно, более широкий набор пользователей python.Каковы некоторые хорошие практики здесь?Можно ли как-то перечислить vars в environment.yml?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Как @Strom говорит, что мое оригинальное решение не так уж плохо.Закончилось ли это доработкой, как описано ниже.


Сначала давайте установим python-dotenv

conda install -c conda-forge python-dotenv -n my-environment-name

Затем создайте файл env.example в корне со значениями, которые нужны вашему пользователю

GITHUB_ACCESS_TOKEN=PUT_YOUR_TOKEN_HERE

Редактировать .gitignore (я рекурсивно игнорирую любой .env)

**/.env

В точке входа вашего скрипта загрузите файл начальной загрузки или там, где вы считаете нужным,

from dotenv import load_dotenv
load_dotenv()

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

import os
print(os.getenv("GITHUB_ACCESS_TOKEN"))


Обратите внимание на это!(Спасибо Alex & Henrik)

Настоятельно не рекомендуется, потому что вы обычно не хотите рисковать некоторыми дингсами, переопределяющими gitignore и передающими файл, полный секретов, в ваш репозиторий.Как правило, вы хотите, чтобы ваше решение для развертывания или сервис, такой как HashiCorp Vault, обрабатывал ваши env-переменные вместо того, чтобы сохранять файл в файловых системах вашей среды.

Так что не связывайтесь с вашей средойфайлы в работе.


Ссылка: https://github.com/theskumar/python-dotenv

Еще одно возможное решение, которое я еще не пробовал: https://github.com/direnv/direnv

0 голосов
/ 06 января 2019

Я предпочитаю ваше оригинальное решение.Пока в файле README и в комментариях достаточно предупреждений, игнорируйте аргументы «веревки».Невозможно создать надежную систему.Если вы хотите проверить, добавьте переменную Environment, которая не позволяет вашей среде по умолчанию работать как есть.Это гарантирует, что среда была изменена для использования, или, по крайней мере, пользователь должен был посмотреть файл.

Принудительное переименование файла примера и проверка его, как описано выше, решает представленные проблемы.Вот.

...