Вы можете установить / переопределить параметры воздушного потока, указанные в ${AIRFLOW_HOME}/airflow.cfg
, с помощью переменных среды, используя этот формат: $ AIRFLOW __ {SECTION} __ {KEY} (обратите внимание на двойное подчеркивание).Вот ссылка на документы по воздушному потоку.Таким образом, вы можете просто сделать
export AIRFLOW__CORE__DAGS_FOLDER=/path/to/dags/folder
Однако, это утомительно и из-за ошибок делать это для разных проектов.В качестве альтернативы вы можете рассмотреть возможность использования pipenv для управления виртуальными средами вместо anaconda.Вот хорошее руководство о pipenv и проблемах, которые оно решает.Одна из функций по умолчанию из pipenv
заключается в том, что она автоматически загружает переменные, определенные в файле .env
, когда вы запускаете оболочку с активированной virtualenv.Итак, вот как может выглядеть ваш рабочий процесс с pipenv
:
cd /path/to/my_project
# Creates venv with python 3.7
pipenv install --python=3.7 Flask==1.0.3 apache-airflow==1.10.3
# Set home for airflow in a root of your project (specified in .env file)
echo "AIRFLOW_HOME=${PWD}/airflow" >> .env
# Enters created venv and loads content of .env file
pipenv shell
# Initialise airflow
airflow initdb
mkdir -p ${AIRFLOW_HOME}/dags/
Примечание: использование Flask==1.03
я объясню в конце, но это потому, что pipenv проверяет, есть ли подчиненные зависимостисовместимы для обеспечения воспроизводимости.
Таким образом, после этих шагов вы получите следующую структуру проекта
my_project
├── airflow
│ ├── airflow.cfg
│ ├── airflow.db
│ ├── dags
│ ├── logs
│ │ └── scheduler
│ │ ├── 2019-07-07
│ │ └── latest -> /path/to/my_project/airflow/logs/scheduler/2019-07-07
│ └── unittests.cfg
├── .env
├── Pipfile
└── Pipfile.lock
Теперь, когда вы инициализируете поток воздуха в первый раз, он создаст ${AIRFLOW_HOME}/airflow.cfg
файл и будет использовать / раскрыть ${AIRFLOW_HOME}/dags
в качестве значения для dags_folder
.В случае, если вам все еще нужно другое место для dags_folder
, вы можете снова использовать .env
файл
echo "AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder" >> .env
Таким образом, ваш .env
файл будет выглядеть так:
AIRFLOW_HOME=/path/to/my_project/airflow
AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder
Что мы достигли и почему это будет работать просто отлично
- Поскольку вы установили
airflow
в виртуальной среде, вам необходимо активировать его, чтобы использовать airflow
- .вы сделали это с
pipenv
, вам нужно будет использовать pipenv shell
для активации venv - Поскольку вы используете
pipenv shell
, вы всегда будете получать переменные, определенные в .env
, экспортированные в ваш venv.Вдобавок к этому pipenv
все еще будет подоболочкой, поэтому, когда вы выйдете из нее, все дополнительные переменные среды также будут очищены. - Различные проекты, использующие воздушный поток, будут иметь разные места для своих файлов журналов и т. Д..
Дополнительные примечания по pipenv
- Чтобы использовать venv, созданный с помощью pipenv, в качестве интерпретатора проекта вашей среды IDE, используйте путь, предоставленный
pipenv --py
. - По умолчанию
pipenv
создает все venvs в том же глобальном местоположении, что и conda, но вы можете изменить это поведение на создание .venv
в корне проекта, добавив export PIPENV_VENV_IN_PROJECT=1
в .bashrc
(или другой rc
).Тогда PyCharm сможет автоматически поднять его, когда вы войдете в настройки интерпретатора проекта.
Примечание по использованию Flask==1.0.3
Воздушный поток 1.10.3 из PyPi зависит от flask>=1.0, <2.0
и jinja2>=2.7.3, <=2.10.0
.Сегодня, когда я тестировал фрагменты кода, последний доступный flask
был 1.1.0 , который зависит от jinja2>=2.10.1
.Это означает, что хотя pipenv может установить все необходимое программное обеспечение, но оно не может заблокировать зависимости.Поэтому для чистого использования моих примеров кода мне пришлось указать версию flask
, для которой требуется версия jinja2
, совместимая с требованиями воздушного потока.Но не о чем беспокоиться.Последняя версия airflow
на GitHub уже исправлена.