У меня есть проект Heroku, который использует переменные среды, чтобы получить его конфигурацию, но я использую virtualenv, чтобы сначала протестировать свое приложение локально.
Есть ли способ установить переменные среды, определенные на удаленном компьютере внутри virtualenv?
python
heroku
environment-variables
virtualenv
Махмуд Ханафи
источник
источник
.env
файлы bork Heroku строит, по крайней мере, по моему опыту. Так что не включайте это в свой репо. Долгое время пользователь / огромный поклонник autoenv кстати. Привет, Кеннет, да, чувак!Если вы используете virtualenvwrapper (я настоятельно рекомендую это сделать), вы можете определить различные хуки (преактивировать, постактивировать, предактивировать, постдезактивировать), используя скрипты с одинаковыми именами
$VIRTUAL_ENV/bin/
. Вам нужен постактивированный крюк.Если вы хотите сохранить эту конфигурацию в каталоге вашего проекта, просто создайте символическую ссылку из каталога вашего проекта на
$VIRTUAL_ENV/bin/postactivate
.Вы даже можете автоматизировать создание символических ссылок каждый раз, когда используете mkvirtualenv .
Очистка при деактивации
Помните, что это не будет убирать за собой. Когда вы деактивируете virtualenv, переменная окружения сохранится. Чтобы очистить симметрично вы можете добавить в
$VIRTUAL_ENV/bin/predeactivate
.Помните, что если использовать это для переменных среды, которые уже могут быть установлены в вашей среде, то неустановленные значения приведут к их полной отмене при выходе из virtualenv. Так что, если это вообще возможно, вы можете записать предыдущее значение где-то временно, а затем прочитать его обратно при деактивации.
Настроить:
Тест:
источник
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
работа не работает для меня.ln
хочет полный путь, поэтому я должен был сделатьln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.ln
любит полные пути, поэтому я попробовал, и это сработало. Когда я попыталсяcat
использовать символическую ссылку с относительным путем, он сказалNo such file or directory
.Вы можете попробовать:
в virtualenv_root / bin / activ. По сути, сценарий активации - это то, что выполняется, когда вы начинаете использовать virtualenv, чтобы вы могли поместить туда все свои настройки.
источник
deactivate
функцию, определенную virtualenv_root / bin / activ, для настройки и сброса балансаИспользуя только virtualenv (без virtualenvwrapper ), установить переменные среды легко с помощью
activate
сценария, который вы используете для активации virtualenv.Бегать:
Добавьте переменные окружения в конец файла следующим образом:
Вы также можете установить аналогичный хук, чтобы сбросить переменную окружения, как это было предложено Данило Баргеном в его великолепном ответе выше, если вам нужно.
источник
cd
просто иметь переменные окружения? дрожьХотя здесь есть много хороших ответов, я не видел опубликованного решения, которое включает в себя сброс переменных среды при деактивации и не требует дополнительных библиотек
virtualenv
, поэтому вот мое решение, которое просто включает редактирование / bin / activ с использованием переменныеMY_SERVER_NAME
и вMY_DATABASE_URL
качестве примеров:В сценарии активации должно быть определение деактивации, и вы хотите сбросить переменные в конце его:
Затем в конце сценария активации установите переменные:
Таким образом, вам не нужно устанавливать что-либо еще, чтобы заставить его работать, и вы не останетесь с переменными, оставшимися, когда станете
deactivate
virtualenv.источник
Локально внутри virtualenv есть два метода, которые вы можете использовать для проверки этого. Первый - это инструмент, который устанавливается через инструментальный пояс Heroku (https://toolbelt.heroku.com/). Инструмент бригадир. Он будет экспортировать все переменные среды, которые хранятся в файле .env локально, а затем запустить процессы приложения в вашем Procfile.
Второй способ, если вы ищете более легкий подход, - это локально создать файл .env и запустить:
источник
Установите autoenv либо
(или)
А затем создайте
.env
файл в папке вашего проекта virtualenvТеперь все работает отлично.
источник
Если вы уже используете Heroku, рассмотрите возможность запуска вашего сервера через Foreman . Он поддерживает
.env
файл, представляющий собой просто список строк,KEY=VAL
которые будут экспортированы в ваше приложение до его запуска.источник
Другой способ сделать это, который разработан для django, но должен работать в большинстве настроек, это использовать django-dotenv.
источник
Чтобы активировать virtualenv в
env
каталоге и экспортировать переменные среды, хранящиеся в.env
использовании:источник
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases