Я установил воздушный поток в одном из своих окружений Anaconda с именем engdados. Когда я выполняю команду airflow initdb, я получаю следующую ошибку: airflow initdb: cannot import name 'Pendulum' from 'pendulum'. Полная обратная трассировка показана ниже:
(engdados) guilherme@Athena-LNX:~$ airflow initdb
Traceback (most recent call last):
File "/home/guilherme/anaconda3/envs/engdados/bin/airflow", line 25, in <module>
from airflow.configuration import conf
File "/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/airflow/__init__.py", line 47, in <module>
settings.initialize()
File "/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/airflow/settings.py", line 403, in initialize
configure_adapters()
File "/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/airflow/settings.py", line 319, in configure_adapters
from pendulum import Pendulum
ImportError: cannot import name 'Pendulum' from 'pendulum' (/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/pendulum/__init__.py)
(engdados) guilherme@Athena-LNX:~$ service start mysql$
start: unrecognized service
(engdados) guilherme@Athena-LNX:~$ service mysql start$
Usage: /etc/init.d/mysql start|stop|restart|reload|force-reload|status|bootstrap
(engdados) guilherme@Athena-LNX:~$ airflow initdb
Traceback (most recent call last):
File "/home/guilherme/anaconda3/envs/engdados/bin/airflow", line 25, in <module>
from airflow.configuration import conf
File "/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/airflow/__init__.py", line 47, in <module>
settings.initialize()
File "/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/airflow/settings.py", line 403, in initialize
configure_adapters()
File "/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/airflow/settings.py", line 319, in configure_adapters
from pendulum import Pendulum
ImportError: cannot import name 'Pendulum' from 'pendulum' (/home/guilherme/anaconda3/envs/engdados/lib/python3.8/site-packages/pendulum/__init__.py)
Проблема в том, что маятник установлен! Когда я выполняю команду conda list, я вижу маятник следующим образом:
Name Version Build Channel
pendulum 2.1.2 pypi_0 pypi
Что я проверил до сих пор:
Активирована ли среда engdados? Да
Установлен ли Pendulum в среде Anaconda? Да
Версия Pendulum, которую показывает Anaconda, отличается от той, что показана в списке conda (1.4.4). Почему?
Я понятия не имею, что происходит. Заранее спасибо.
Во второй версии маятника класс pendulum.Pendulum заменен на pendulum.DateTime.
Ваша версия воздушного потока ожидает маятник 1.x, но в вашей среде есть 2.x.
Возможно, вы сможете исправить это, создав новый env и установив airflow 2.0 (который использует маятник 2.x). Если вы должны использовать воздушный поток < 2,0, вам нужно будет закрепить маятник до < 2,0 (например, используя ограничения пипсов).
Странно, что даже последний Airflow (2.0 на момент написания этой статьи) по-прежнему использует довольно старую версию Pendulum (1.4.4 от 21 марта 2018 г.).
Нет, в airflow 2.0 используется маятник 2. Я не думаю, что он закреплен, но если вы не прикрепите его к 1.x, вы должны получить 2. И если вы прикрепите его к 1.x, я не думаю, что airflow будет работать.
Также, если вы используете Pendulum в своем коде, например, в пользовательских операторах, вы можете добавить
try:
from pendulum import DateTime as Pendulum
except ImportError:
from pendulum import Pendulum
Спасибо за подсказки. Я установил prefect в той же среде, которая испортила все мои пакеты. Я воссоздал env только для воздушного потока, и все работало хорошо. Хорошего дня! ;)