Apache Airflow: Error while install airflow: By default one of Airflow's dependencies installs a GPL
Ты ставишь Airflow, предвкушая, как скоро начнешь настраивать даги, а вместо этого получаешь в терминал внезапную ошибку про какую-то GPL лицензию. Знакомо? Это
Ты ставишь Airflow, предвкушая, как скоро начнешь настраивать даги, а вместо этого получаешь в терминал внезапную ошибку про какую-то GPL лицензию. Знакомо? Это classic.
Ситуация стандартная: выполняешь pip install airflow[postgres] (или с другим пакетом), и процесс падает с RuntimeError, который кричит про зависимость unidecode и лицензию GPL.
Airflow тут просто перестраховывается. Для генерации “красивых” имён (слагов) он использует библиотеку python-slugify. У неё два варианта зависимости для обработки Unicode: unidecode (GPL) или text-unidecode (BSD).
По умолчанию pip хочет поставить GPL-версию (unidecode), но команда установки Airflow намеренно ломает процесс, чтобы ты, как взрослый инженер, осознанно выбрал лицензионные условия для своего проекта.
Решение в две строки
Перед установкой нужно выставить одну из двух переменных окружения. Делается это прямо в командной строке.
Вариант 1: Согласиться на GPL
export AIRFLOW_GPL_UNIDECODE=yes
pip install apache-airflow[postgres]
Это скажет установщику: “Я в курсе про GPL, ставь unidecode, мне можно”. Если ты разрабатываешь коммерческий продукт с закрытым кодом, этот путь не для тебя — лицензия GPL может быть заразной.
Вариант 2: Выбрать BSD-альтернативу
export SLUGIFY_USES_TEXT_UNIDECODE=yes
pip install apache-airflow[postgres]
Это безопасный путь. Установится BSD-лицензионная библиотека text-unidecode. Функциональность почти та же, а головной боли с лицензиями — ноль.
Важные нюансы
Команда export делает переменную доступной только для текущей сессии shell. Если используешь Docker, прокидывай её через -e. В Kubernetes — через ConfigMap или в манифесте пода.
И да, обрати внимание на точное имя пакета. Ставь apache-airflow[postgres], а не просто airflow[postgres]. Первое — официальный пакет, второе — может быть чем угодно.
Что в сухом остатке
Ошибка не страшная, а даже полезная. Она заставляет тебя сделать осознанный выбор лицензии для зависимостей. В 99% случаев внутри компании смело выбирай SLUGIFY_USES_TEXT_UNIDECODE=yes и живи спокойно. GPL-версию оставь для open-source проектов, где это допустимо.
Порядок действий прост: перед pip-инсталляцией выставляешь одну переменную, забываешь об этой проблеме навсегда и переходишь к более интересным вещам — например, к отладке дагов, которые не появляются в интерфейсе.