ImportError: cannot import name cygrpc on development Google App Engine with Firebase Cloud Firestore

ImportError: cannot import name cygrpc on development Google App Engine with Firebase Cloud Firestore

我正在使用 Python 3.6、Falcon Framework、Google App Engine 和 Firebase Cloud Firestore 构建 RESTful API。在运行时我收到以下错误...

File "E:\Bill\Documents\GitHubProjects\LetsHang-BackEnd\lib\google\cloud\firestore_v1beta1\_helpers.py", line 24, in <module> import grpc
File "E:\Bill\Documents\GitHubProjects\LetsHang-BackEnd\lib\grpc\__init__.py", line 22, in <module>
 from grpc._cython import cygrpc as _cygrpc
ImportError: cannot import name cygrpc

在研究 Whosebug 时,我发现了一个 ,但它提出了一个基于 Docker 的解决方案。 Docker 对我们来说不是一个可行的解决方案。我还在 Whosebug 上找到了一篇建议 运行 "pip install grpcio" 的文章。我们并非没有运气。

我们使用 requirements.txt 文件构建 App Engine 依赖项。该文件包含以下内容 ...

falcon==1.4.1
google-api-python-client
google-cloud-firestore
firebase-admin
enum34
grpcio

我们使用命令应用需求文件...

pip install -t lib -r requirements.txt

App Engine 服务器使用命令启动...

dev_appserver.py .

开发环境为Windows10.

您似乎混淆了 GAE 标准环境和灵活环境:

  • 使用 Python 3.6 只能在灵活的环境中使用(顺便说一句,基本上是 Docker-based)
  • lib目录下安装应用依赖,本地开发使用dev_appserver.py仅适用于标准环境

某种程度上相关:

好的。我会写下我的发现,以防有另一个像我这样的傻瓜。

首先,Dan's回答正确。我混合了标准和灵活的环境。我查找了一种将 Falcon Framework 与 App Engine 结合使用的方法;事实证明,唯一的文章使用标准环境。这就是我最终使用 dev_appserver.py 的方式。但是,我的应用程序是 Python 3.6,并且具有阻止降级到 2.7 的依赖项。

要在本地开发灵活的环境,您只需像往常一样运行。对于 Falcon Framework,这意味着使用 Waitress wsgi 服务器。

我发现构建和使用 Python 虚拟环境是一种很好的做法。您为此使用 virtualenv 命令。在部署时,Google 为云中的应用构建一个 docker 容器。要重建所有必需的 Python 包,您必须提供一个 requirements.txt 文件。如果您有虚拟环境,那么使用 pip freeze 可以轻松生成需求文件。