Linux环境下Django Rest API执行migrate时出现ModuleNotFoundError: No module named 'onesignal_client'问题求助
解决
ModuleNotFoundError: No module named 'onesignal_client' 错误 看起来你遇到的问题是因为安装的旧版onesignal包依赖一个未安装(或已下架)的onesignal_client模块,同时你安装的onesignal_sdk是另一个独立的SDK包,两者不兼容导致了依赖冲突。下面是具体的解决步骤:
第一步:清理冲突的现有包
首先卸载已经安装的两个OneSignal相关包,避免版本和依赖冲突:
sudo pip3.9 uninstall -y onesignal onesignal_sdk
(用pip3.9确保和你运行python3.9 manage.py的Python环境完全一致,避免环境不一致导致的安装失效)
第二步:安装官方维护的OneSignal SDK(推荐)
目前官方持续维护的Python SDK是onesignal-sdk,这个包没有遗留依赖问题,功能也更完整。执行安装命令:
sudo pip3.9 install onesignal-sdk
第三步:调整代码中的导入语句
修改你myapp_notifications/helpers.py中的导入代码,适配官方SDK的结构:
原来的:
import onesignal as onesignal_sdk
替换为官方SDK的正确导入方式(可根据你需要使用的功能调整):
from onesignal_sdk.client import OneSignal from onesignal_sdk.error import OneSignalHTTPError
之后按照官方SDK的规范初始化客户端、调用接口即可。
错误原因说明
你安装的onesignal包是一个多年未维护的第三方包(最后更新在2018年),它的内部代码硬依赖onesignal_client模块,但这个模块要么没有被自动安装,要么已经从PyPI下架/改名。而你同时安装的onesignal_sdk是另一个独立的实现,和这个旧包没有关联,所以无法解决依赖缺失问题。使用官方维护的SDK是最稳妥的解决方案。
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

