Windows环境运行Luigid(--background)报错:No module named 'pwd'
pwd模块的问题 问题描述
我正在跟着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 dependencies ===== Luigi Execution Summary =====
但尝试用luigid --background启动可视化服务器时,抛出了ModuleNotFoundError: No module named 'pwd'的错误,具体栈信息如下:
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'
我的环境是Windows系统,Anaconda Spyder,Python 3.6。
问题原因
pwd是Unix/Linux系统专属的Python模块,用于处理用户和组信息,Windows系统本身就没有这个模块。而luigid --background参数会触发Luigi的 daemon 化逻辑,这个逻辑依赖了python-daemon库,该库内部调用了pwd模块,所以在Windows下执行就会报错。
解决方案
方案1:直接启动luigid,不加--background参数
这是最简单的解决方法,直接在命令行执行:
luigid
启动后,你可以正常在浏览器访问http://localhost:8082查看Luigi的可视化界面。唯一的缺点是启动luigid的命令行窗口不能关闭,关闭后服务就会停止。
方案2:用Windows的后台方式启动luigid
如果你需要让luigid在后台运行(不占用命令行窗口),可以用Windows的start /B命令来启动:
start /B luigid
这样luigid会在后台运行,你可以正常关闭命令行窗口,服务依然保持运行。如果需要停止服务,可以在任务管理器里找到python.exe或luigid.exe进程结束掉。
方案3:升级Luigi版本(可选)
一些较新的Luigi版本对Windows的兼容性更好,可能优化了daemon化的逻辑。不过注意你的Python版本是3.6,需要找支持Python3.6的Luigi版本(比如Luigi 3.0.x系列),执行升级命令:
pip install luigi --upgrade
升级后再尝试启动,不过依然不建议在Windows下用--background参数,还是用方案1或2更稳妥。
内容的提问来源于stack exchange,提问作者ALEX MATHEW

