Ubuntu22.04下Apache+WSGI部署无法导入cv2/websockets模块求助
确认WSGI使用的Python解释器路径
Apache的WSGI模块可能默认调用系统全局Python,而非你本地测试用的解释器。需检查虚拟主机配置cam.loc.conf中是否通过WSGIPythonHome或WSGIPythonPath指定了目标Python环境路径,示例配置如下:WSGIPythonHome /path/to/your/python/env WSGIPythonPath /var/www/Apache_with_Python/cam:/path/to/your/python/env/lib/python3.10/site-packages配置后重启Apache:
sudo systemctl restart apache2核对模块安装路径与WSGI的Python路径匹配度
本地执行which python3获取测试用解释器路径,再执行python3 -c "import cv2; print(cv2.__file__)"查看cv2的安装目录,对比WSGI所使用Python的site-packages目录是否一致。若使用虚拟环境,需确保WSGI配置指向该虚拟环境的Python。验证Apache进程的目录访问权限
Apache默认以www-data用户运行,可能无权限访问你的Python模块安装目录。可执行以下命令调整权限:sudo chmod -R 755 /path/to/your/python/env/lib/python3.10/site-packages sudo chown -R www-data:www-data /path/to/your/python/env/lib/python3.10/site-packages检查WSGI脚本的shebang行
若你的WSGI脚本开头有#!/usr/bin/env python3,需确认该路径指向能正常导入cv2的Python解释器,或直接写入绝对路径,例如#!/path/to/your/python/env/bin/python3。排查websockets模块的安装环境
与cv2排查逻辑一致,执行/path/to/wsgi/python -m pip list查看WSGI所用Python环境的已安装模块,确认websockets存在。
内容的提问来源于stack exchange,提问作者user24284859

