Luigi Pipelining: в Windows нет модуля с именем pwd

Я пытаюсь выполнить учебник, приведенный в https://marcobonzanini.com/2015/10/24/building-data-pipelines-with-python-and-luigi/.

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

Scheduled 2 tasks of which:
* 2 ran successfully:
    - 1 PrintNumbers(n=1000)
    - 1 SquaredNumbers(n=1000)

This progress looks :) because there were no failed tasks or missing external de
pendencies

===== Luigi Execution Summary =====

Однако, чтобы попробовать визуализацию на сервере, когда я пытаюсь запустить luigid --background, он выдает ошибку, говорящую, что у меня нет модуля pwd. Я не могу найти модуль pwd, использующий pip для Windows.

  File "c:\users\alex\appdata\local\continuum\anaconda3\lib\site-packages
\luigi\process.py", line 79, in daemonize
    import daemon
  File "c:\users\alex\appdata\local\continuum\anaconda3\lib\site-packages
\daemon\__init__.py", line 42, in <module>
    from .daemon import DaemonContext
  File "c:\users\alex\appdata\local\continuum\anaconda3\lib\site-packages
\daemon\daemon.py", line 25, in <module>
    import pwd
ModuleNotFoundError: No module named 'pwd'

Я работаю в Anaconda Spyder с Python 3.6

3 ответа

Я смог это исправить, установив python-daemon==2.1.2. Если у вас уже есть python-daemon, попробуйте перейти на версию 2.1.2. Сделайте это перед установкой luigi.

Пример: pip install python-daemon==2.1.2, затем pip install luigi.

По какой-то причине, если вы не используете параметр --background в Windows, он запустится просто отлично

просто пиши luigid в cmd

Основная проблема здесь в том, что luigid --background пытается порождать демона python, который является специфичной для unix.

См. Раздел "Сервер luigid" здесь: http://luigi.readthedocs.io/en/stable/central_scheduler.html

В частности:

Обратите внимание, что для этого требуется python-daemon. По умолчанию сервер запускается на AF_INET и AF_INET6 через порт 8082 (который можно изменить с помощью флага --port) и прослушивает все IP-адреса. (Для использования сокета AF_UNIX используйте флаг --unix-socket)

Этот существующий ответ о переполнении стека предоставляет более подробную информацию:

Как запустить процесс демона из Python на Windows?

Варианты, которые я вижу здесь:

  1. Зарегистрируйте запрос с Luigi на github, чтобы улучшить их поддержку Windows, чтобы создать Luigid как процесс Windows для переключателя --background
  2. Запустите виртуальную машину с соответствующей ОС Unix в Windows и запустите там конвейеры Luigi.
  3. Следуйте совету Стивена Г. и запустите luigid в отдельной командной строке.

Чтобы воспроизвести основную причину этой проблемы, откройте приглашение python в Windows и введите:

>>import daemon

Трассировка (последний вызов был последним): Файл "", строка 1, в файле "C:\Anaconda3\lib\site-packages\daemon__init__. Py", строка 42, из файла.daemon import DaemonContext File "C:\Anaconda3\lib\site-packages\daemon\daemon.py", строка 25, в импорте pwd ModuleNotFoundError: нет модуля с именем 'pwd'

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