Запуск задачи Луиджи из cmd - нет модуля с именем tasks

У меня проблемы с запуском задачи Луиджи через командную строку Windows. Вот факты:

  • Запуск Anaconda, установленного в C: \ ProgramData \ Anaconda2 (Python 2.7)

  • Anaconda добавила свои пути в переменную PATH, но переменной PYTHONPATH нет.

  • Задача, которую я пытаюсь запустить, находится в C:\....\tasks.py

  • # P5 #
    # P6 #

Я попытался создать переменную PYTHONPATH и добавить точный путь к каталогу, содержащему мой tasks.py файл, но это не сработало. Другая проблема, с которой я столкнулся, которая может быть связана, - это когда я запускаю планировщик luigi через cmd, используя:

luigid

он работает нормально, но всякий раз, когда я пытаюсь запустить его, используя:

luigid --background

Я получаю следующую ошибку:

No module named pwd

Похоже, что с моей настройкой что-то не так, любая помощь будет принята с благодарностью.


person Kristiyan Georgiev    schedule 16.03.2017    source источник


Ответы (4)


У меня была такая же проблема, и я решил ее. Модуль, который вы хотите запланировать или выполнить, должен находиться в любой папке, указанной в sys.path. Один из способов добиться этого в WINDOWS TERMINAL / CMD / - перейти в папку, в которой есть модуль python, и выполнить команду:

set PYTHONPATH=%cd%;%PYTHONPATH%

Эта команда временно добавит ваш текущий каталог в существующий PYTHONPATH. Если в системе нет переменной PYTHONPATH, просто пропустите часть после точки с запятой.
В том же окне терминала введите команду luigi.

luigi --module tasks MyTask --local-scheduler

Если у вас по-прежнему возникают проблемы, добавьте свой PYTHONPATH в переменную PATH, используя:

set PATH=%PYTHONPATH%;%PATH%

Для меня добавление текущей папки в PYTHONPATH работает, и это легко выполнить с помощью командных файлов. В качестве альтернативы вы можете постоянно добавлять эту переменную в Windows.

person Marek Złakowski    schedule 16.04.2018

Возьмите каталог examples в репозитории luigi (git clone ... и у вас есть каталог luigi). Там вы можете найти несколько разных примеров, среди них:

  • hello_world.py contains stuff like task_namespace = 'examples' (that's the same as the python module examples in the repository where all these python files are saved):
    • this could be executed using just the luigi command (no need to have the daemon luigid) from the outside of the python module examples as: cd luigi && PYTHONPATH=. luigi --module examples.hello_world examples.HelloWorldTask --local-scheduler
  • top_artists.py does not contain any reference to things like task_namespace:
    • this could be run from within the python module examples: cd luigi/examples && PYTHONPATH='.' luigi --module top_artists AggregateArtists --local-scheduler --date-interval 2012-06

У меня это сработало, используя miniconda (аналогично anaconda) и cygwin, но я думаю, что это может сработать, даже если вы не используете cygwin ( возможно, powershell или cmd не позволяют объединять команды с помощью &&, но вы всегда можете запускать эти команды одну за другой).

Я не уверен в причинах / объяснениях, но для устранения неполадок в этом поведении вы можете поиграть с hello_world.py и запустить его как cd luigi/examples && PYTHONPATH=. luigi --module hello_world HelloWorldTask --local-scheduler (обратите внимание, что команда luigi вызывается без examples. в качестве префикса для параметров команды ), это приведет к следующему исключению:

raise TaskClassNotFoundException(cls._missing_task_msg(name))
luigi.task_register.TaskClassNotFoundException: No task HelloWorldTask. Candidates are: Config,ExternalTask,RangeBase,RangeByMinutes,RangeByMinutesBase,RangeDaily,RangeDailyBase,RangeHourly,RangeHourlyBase,Task,TestNotificationsTask,WrapperTask,batch_email,core,email,examples.HelloWorldTask,execution_summary,retcode,scheduler,sendgrid,smtp,worker

Чтобы дать некоторые подсказки по другой проблеме, связанной с демоном, я запускаю его на cygwin с помощью такой команды: luigid &. Этот суффикс амперсанда возвращает вам приглашение командной строки. Чтобы проверить, какой PID связан с демоном, я все еще использую ту же командную строку в cygwin и запускаю ps aux | grep luigid. Этот подход, вероятно, будет работать ТОЛЬКО на cygwin (из-за некоторых внутренних компонентов, связанных с bash).

person TPPZ    schedule 29.03.2017

Поскольку я сам столкнулся с проблемой. Мне помогло буквально придерживаться того, что указано в документации :

PYTHONPATH='.' luigi --module top_artists AggregateArtists --local-scheduler --date-interval 2012-06

Итак, определение PYTHONPATH должно быть в той же команде, что и команда luigi. Это мне помогло.

person GrazingScientist    schedule 28.02.2019

Луиджи, кажется, меняет sys.path переменную. Вы можете обезьяно пропатчить пакет luigi где-нибудь, чтобы добавить sys.path.insert(0,'')

person shouldsee    schedule 07.05.2020