GAE开发环境集成Firebase Firestore时遇cygrpc导入错误求助
嘿,我之前在搭建类似的Python 3.6 + Falcon + GAE + Firestore REST API时,也碰到过一模一样的gRPC导入错误,先把你遇到的错误信息贴出来方便对照:
File "E:\Bill\Documents\GitHubProjects\LetsHang-BackEnd\lib\google\cloud\firestore_v1beta1_helpers.py", line 24, in
import grpc
File "E:\Bill\Documents\GitHubProjects\LetsHang-BackEnd\lib\grpc_init_.py", line 22, in
from grpc._cython import cygrpc as _cygrpc
ImportError: cannot import name ...
下面是几个亲测有效的解决思路:
锁定兼容的gRPC版本:GAE Python 3.6环境对高版本gRPC的Cython扩展支持不太友好,你可以直接降级到
grpcio==1.34.1这个经过验证的稳定版本。操作方法很简单:- 在
requirements.txt里添加一行:grpcio==1.34.1 - 或者直接运行命令重新安装依赖:
pip install grpcio==1.34.1 -t lib/(注意你的依赖是放在项目的lib目录下)
- 在
切换到Firestore REST模式(备选方案):如果gRPC的问题始终绕不开,那就换个思路用Firestore的REST客户端,完全不需要依赖C扩展。初始化客户端的时候这么写就行:
from google.cloud import firestore import google.auth # 获取默认凭证和项目ID credentials, project_id = google.auth.default() # 用REST模式初始化客户端 client = firestore.Client( credentials=credentials, project=project_id, client_info={"api_endpoint": "firestore.googleapis.com:443"} )检查GAE配置和依赖加载:
- 确认
app.yaml里的runtime是python36,不要加vendor: false这类可能干扰依赖加载的配置 - 确保你的
lib目录被正确加入Python路径,在项目入口文件(比如main.py)开头加上:import sys sys.path.insert(0, 'lib')
- 确认
清理重装依赖:有时候本地依赖缓存会搞出奇怪的问题,直接删掉
lib目录下所有和grpc相关的文件夹,然后重新运行pip install -r requirements.txt -t lib/,确保安装的是适配Windows开发环境和GAE的版本。
内容的提问来源于stack exchange,提问作者Bill McCann

