NSSM托管Python服务启动后暂停:pandasql模块未找到问题求助
这个问题我之前碰到过!核心原因就是NSSM启动服务时用的Python环境和你手动运行脚本的环境不是同一个——毕竟你手动能跑说明pandasql确实装了,但服务进程找不到,肯定是环境路径没对上。下面是一步步的排查和解决方法:
1. 确认你手动运行时的Python路径
先打开命令提示符,输入
where python,找到你手动执行脚本时实际用到的Python.exe完整路径(比如虚拟环境里的C:\Users\YourName\venv\Scripts\python.exe,或者系统环境的C:\Python310\python.exe)。手动运行脚本时用的是哪个Python,服务就得调用同一个。2. 修改NSSM的应用配置
如果已经创建了服务,打开命令行执行
nssm edit <你的服务名称>,在弹出的配置窗口里:- 把Application标签页的
Path改成你刚找到的完整Python.exe路径(别只写python,要写全路径) Arguments填写你的脚本完整路径,比如C:\projects\your_script.py- 确保Working Directory设置为脚本所在的文件夹,避免路径相关的额外问题
- 把Application标签页的
3. 验证环境一致性(可选但推荐)
可以在你的Python脚本开头加几行代码,用来输出服务进程的Python环境信息:
import sys import logging logging.basicConfig(filename='env_check.log', level=logging.INFO) logging.info(f"Python executable path: {sys.executable}") logging.info(f"Package search paths: {sys.path}")然后手动运行脚本一次,再启动服务一次,对比两个日志文件里的路径。如果不一样,就说明环境确实不匹配,回到步骤2修正路径。
4. 检查服务的运行权限
默认情况下,NSSM可能用Local System账户运行服务,这个账户的环境变量和你当前登录用户的不一样。你可以在NSSM配置的Log On标签页,选择"此账户",输入你当前的用户名和密码,这样服务就会用你的用户环境运行,和手动操作时一致。
5. 确保包安装到服务用的环境
如果确认了服务用的Python路径,直接用这个路径的pip来安装
pandasql,比如:C:\Users\YourName\venv\Scripts\pip.exe install pandasql这样就能保证包安装在服务能访问到的环境里。
做完这些步骤后,重启服务再试试,应该就能解决ModuleNotFoundError的问题了。如果还有其他错误,再根据新的日志信息排查即可。
内容的提问来源于stack exchange,提问作者Abhik Chakraborty

