Сбой initdb воздушного потока из-за SyntaxError при импорте AsyncRetry - PullRequest
1 голос
/ 30 марта 2019

Я новичок в Airflow.Я устанавливаю это pip install apache-airflow.Когда я запускаю команду airflow initdb в терминале, я получаю сообщение об ошибке ниже.Где я ошибся во время установки и как я могу исправить эту проблему?

aamir@aamir-Inspiron-3542:~$ airflow initdb
[2019-03-30 18:32:27,309] {__init__.py:51} INFO - Using executor SequentialExecutor
DB: sqlite:////home/aamir/airflow/airflow.db
[2019-03-30 18:32:31,790] {db.py:338} INFO - Creating tables
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
ERROR [airflow.models.DagBag] Failed to import: /home/aamir/anaconda3/lib/python3.7/site-packages/airflow/example_dags/example_http_operator.py
Traceback (most recent call last):
  File "/home/aamir/anaconda3/lib/python3.7/site-packages/airflow/models.py", line 374, in process_file
    m = imp.load_source(mod_name, filepath)
  File "/home/aamir/anaconda3/lib/python3.7/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/aamir/anaconda3/lib/python3.7/site-packages/airflow/example_dags/example_http_operator.py", line 27, in <module>
    from airflow.operators.http_operator import SimpleHttpOperator
  File "/home/aamir/anaconda3/lib/python3.7/site-packages/airflow/operators/http_operator.py", line 21, in <module>
    from airflow.hooks.http_hook import HttpHook
  File "/home/aamir/anaconda3/lib/python3.7/site-packages/airflow/hooks/http_hook.py", line 23, in <module>
    import tenacity
  File "/home/aamir/anaconda3/lib/python3.7/site-packages/tenacity/__init__.py", line 352
    from tenacity.async import AsyncRetrying
              ^
SyntaxError: invalid syntax
Done.

1 Ответ

2 голосов
/ 31 марта 2019

В Python 3.7 async является зарезервированным ключевым словом, что означает, что его нельзя использовать в именах модулей и переменных. Это было действительно в предыдущих версиях Python, но начиная с 3.7, SyntaxError повышается.

В вашем случае Airflow поставляется с предустановленными примерами групп доступности баз данных, которые были проанализированы при запуске airflow initdb. Некоторые из этих DAG используют SimpleHttpOperator, который зависит от http_hook.py. Этот хук, кроме того, зависит от библиотеки tenacity, которая пытается импортировать модуль async как часть инициализации:

 from tenacity.async import AsyncRetrying

Чтобы это исправить, подождите / установите Airflow v1.10.3, который обновляет Tenacity (см. AIRFLOW-2876 ). Кроме того, вы можете понизить версию своего Python. Вы можете увидеть, что импорт не удается с помощью 3.7.3:

$ docker run --rm -it python:3.7
Python 3.7.3 (default, Mar 27 2019, 23:40:30)

>>> from tenacity.async import AsyncRetrying
  File "<stdin>", line 1
    from tenacity.async import AsyncRetrying
                      ^
SyntaxError: invalid syntax

Но в версии 3.6.8 все работает нормально:

$ docker run --rm -it python:3.6
Python 3.6.8 (default, Feb  6 2019, 12:07:20)

>>> from tenacity.async import AsyncRetrying
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tenacity'
...