Воздушные потоки и PYTHONPATH - PullRequest
0 голосов
/ 06 июня 2018

У меня есть несколько дагов, которые не могут найти модули Python.Внутри Airflow UI я вижу тонну этих вариантов сообщений.

Broken DAG: [/home/airflow/source/airflow/dags/test.py] No module named 'paramiko'

Внутри файла я могу напрямую изменить python sys.path, и это, кажется, смягчает мою проблему,import sys sys.path.append('/home/airflow/.local/lib/python2.7/site-packages')

Неправильно, хотя мне приходится напрямую указывать мой путь в моем коде.Я пытался экспортировать PYTHONPATH в учетные записи пользователей Airflow .bashrc, но, похоже, не читается при выполнении заданий dag.Как правильно это сделать?

Спасибо.

----- update -----

Спасибо за ответы.

ниже мои сценарии systemctl.

::::::::::::::
airflow-scheduler-airflow2.service
::::::::::::::
[Unit]
Description=Airflow scheduler daemon

[Service]
EnvironmentFile=/usr/local/airflow/instances/airflow2/etc/envars
User=airflow2
Group=airflow2
Type=simple
ExecStart=/usr/local/airflow/instances/airflow2/venv/bin/airflow scheduler
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
::::::::::::::
airflow-webserver-airflow2.service
::::::::::::::
[Unit]
Description=Airflow webserver daemon

[Service]
EnvironmentFile=/usr/local/airflow/instances/airflow2/etc/envars
User=airflow2
Group=airflow2
Type=simple
ExecStart=/usr/local/airflow/instances/airflow2/venv/bin/airflow webserver
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

это EnvironentFile Содержимое используется сверху

more /usr/local/airflow/instances/airflow2/etc/envars
PATH=/usr/local/airflow/instances/airflow2/venv/bin:/usr/local/bin:/usr/bin:/bin
AIRFLOW_HOME=/usr/local/airflow/instances/airflow2/home
AIRFLOW_CONFIG=/usr/local/airflow/instances/airflow2/etc/airflow.cfg

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

У меня была похожая проблема:

  1. Python не был загружен из virtualenv для запуска воздушного потока (этот фиксированный воздушный поток не извлекается из virtualenv)
  2. Подмодули в пути dags wasn 'загружен из-за другого базового пути (это исправило импорт собственных модулей в папку dags

Я добавил следующие строки в файл environemnt для службы systemd (/usr/local/airflow/instances/airflow2/etc/envars в вашем случае)

source /home/ubuntu/venv/airflow/bin/activate
PYTHONPATH=/home/ubuntu/venv/airflow/dags:$PYTHONPATH
0 голосов
/ 06 июня 2018

Похоже, что ваша среда python деградировала - у вас есть несколько экземпляров python в вашей виртуальной машине (python 3.6 и python 2.7) и несколько экземпляров pip.Есть пип с python3.6, который пытается быть использован, но все ваши модули на самом деле с вашим питоном 2.7.

Это можно легко решить, используя символические ссылки для перенаправления на 2.7.

Введите команды и посмотрите, какой экземпляр Python используется (2.7.5, 2.7.14, 3.6 и т. Д.):

  1. python
  2. python2
  3. python2.7

или введите which python, чтобы узнать, какой экземпляр python используется вашим виртуальным компьютером.Вы также можете сделать which pip, чтобы увидеть, какой экземпляр pip используется.

Я собираюсь предположить, что python и which python приводит к Python 3 (который вы не хотите использовать), но python2 и python2.7 ведут к экземпляру, который вы хотите использовать.

Чтобы создать символическую ссылку, чтобы использовать /home/airflow/.local/lib/python2.7/, выполните следующие действия и создайте следующие символические ссылки:

  1. cd home/airflow/.local/lib/python2.7
  2. ln -s python2 python
  3. ln -s /home/airflow/.local/lib/python2.7 python2

Структура символической ссылки: ln -s #PATHDIRECTED #LINKNAME Вы, по сути, говорите, когда запускаетекоманда python, перейдите к python2.После запуска python2 перейдите к /home/airflow/.local/lib/python2.7.Все перенаправлено.

Теперь повторите три вышеприведенные команды (python, python2, python2.7).Все должно привести к экземпляру Python, который вы хотите.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...