Initdb воздушного потока: невозможно импортировать имя «Маятник» из «маятника»

Я установил воздушный поток в одном из своих окружений 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). Почему?

Я понятия не имею, что происходит. Заранее спасибо.

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
0
3 933
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Во второй версии маятника класс pendulum.Pendulum заменен на pendulum.DateTime.

Ваша версия воздушного потока ожидает маятник 1.x, но в вашей среде есть 2.x.

Возможно, вы сможете исправить это, создав новый env и установив airflow 2.0 (который использует маятник 2.x). Если вы должны использовать воздушный поток < 2,0, вам нужно будет закрепить маятник до < 2,0 (например, используя ограничения пипсов).

Спасибо за подсказки. Я установил prefect в той же среде, которая испортила все мои пакеты. Я воссоздал env только для воздушного потока, и все работало хорошо. Хорошего дня! ;)

Guilherme Noronha 29.12.2020 19:16

Странно, что даже последний Airflow (2.0 на момент написания этой статьи) по-прежнему использует довольно старую версию Pendulum (1.4.4 от 21 марта 2018 г.).

Andor 05.01.2021 17:40

Нет, в airflow 2.0 используется маятник 2. Я не думаю, что он закреплен, но если вы не прикрепите его к 1.x, вы должны получить 2. И если вы прикрепите его к 1.x, я не думаю, что airflow будет работать.

dstandish 05.01.2021 19:39

Также, если вы используете Pendulum в своем коде, например, в пользовательских операторах, вы можете добавить

try:
    from pendulum import DateTime as Pendulum
except ImportError:
    from pendulum import Pendulum

Другие вопросы по теме