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?
Варианты, которые я вижу здесь:
- Зарегистрируйте запрос с Luigi на github, чтобы улучшить их поддержку Windows, чтобы создать Luigid как процесс Windows для переключателя --background
- Запустите виртуальную машину с соответствующей ОС Unix в Windows и запустите там конвейеры Luigi.
- Следуйте совету Стивена Г. и запустите 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'