运行main.py报cannot import name 'ResolveInfo' from 'graphql'冲突求解
问题核心
- 依赖冲突根源:
graphene及相关生态包最高适配graphql-core 3.1.x版本,而新版ariadne要求graphql-core >=3.2,二者版本要求无法同时满足。 - 依赖解析失败:你配置中
black = "*"时pipenv默认跳过预发布版本,而black早期版本全部为beta/alpha版,因此找不到匹配包。
可行解决方案
方案1:版本锁定(无需修改现有业务代码)
直接锁定所有依赖到互相兼容的版本,ariadne 0.15.x是最后一个支持graphql-core 3.1.x的版本,可以同时适配graphene生态。
操作步骤
- 删除当前项目下的
Pipfile、Pipfile.lock,并移除现有虚拟环境,避免缓存干扰 - 将
Pipfile中的依赖替换为以下固定版本:
uvicorn = "==0.20.0" fastapi = "==0.95.2" graphene = "==3.2.2" starlette = "==0.27.0" ariadne = "==0.15.1" alembic = "==1.10.4" aniso8601 = "==9.0.1" appdirs = "==1.4.4" asgiref = "==3.6.0" black = "==23.3.0" click = "==8.1.3" colorama = "==0.4.6" graphene-sqlalchemy = "==3.0.0" graphql-relay = "==3.2.0" graphql-core = "==3.1.7" greenlet = "==2.0.2" h11 = "==0.14.0" mypy-extensions = "==1.0.0" pathspec = "==0.11.1" promise = "==2.3" psycopg2-binary = "==2.9.6" pydantic = "==1.10.7" python-dateutil = "==2.8.2" python-dotenv = "==1.0.0" python-editor = "==1.0.4" regex = "==2023.3.23" singledispatch = "==3.7.0" six = "==1.16.0" toml = "==0.10.2" typing-extensions = "==4.5.0" dill = "==0.2.4" Mako = "==1.2.4" MarkupSafe = "==2.1.2" Rx = "==3.2.0" SQLAlchemy = "==1.4.48"
- 执行
pipenv install完成安装即可,不会再出现版本冲突问题。
代码微调
你现有main.py中导入的QueryType未使用,可以直接删除该行,不影响功能运行。
方案2:统一技术栈(彻底避免冲突)
直接将原有graphene实现的查询、突变接口全部迁移到ariadne,ariadne本身原生支持普通查询、突变、订阅全场景,无需同时维护两个GraphQL框架,从根源上消除依赖冲突。
内容的提问来源于stack exchange,提问作者Ali Husham
相关产品推荐
相关产品推荐

