ImportError:无法使用Firebase Cloud Firestore在开发Google App Engine上导入名称cygrpc

时间:2018-04-09 20:16:45

标签: google-app-engine google-cloud-platform google-cloud-firestore falconframework

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

def get_queryset(self):
    qs = super().get_queryset()

    final_q = Q()  # empty Q that will be OR'ed together with the other statements
    if len(self.request.GET.get('field_1', '')) > 0:
        final_q |= Q(title__icontains=self.request.GET['field_1'])
    if len(self.request.GET.get('field_2', '')) > 0:
        final_q |= Q(user__username__iexact=self.request.GET['field_2'])
    if len(self.request.GET.get('field_3', '')) > 0:
        final_q |= Q(user__first_name__iexact=self.request.GET['field_3'])
    if len(self.request.GET.get('field_4', '')) > 0:
        final_q |= Q(user__last_name__iexact=self.request.GET['field_4'])

    # apply Q to queryset
    qs = qs.filter(final_q)

    return qs

在研究StackOverFlow时,我发现了一个article regarding an AWS Lambda deployment,但它提出了一个基于Docker的解决方案。 Docker对我们来说不是一个可行的解决方案。我还发现一篇关于StackOverflow的文章建议运行" pip install grpcio"。我们没有运气。

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

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

我们使用命令...

应用需求文件
falcon==1.4.1
google-api-python-client
google-cloud-firestore
firebase-admin
enum34
grpcio

使用命令...

启动App Engine服务器
pip install -t lib -r requirements.txt

开发环境是Windows 10。

2 个答案:

答案 0 :(得分:1)

您似乎正在混淆GAE标准和灵活的环境:

  • 只能在灵活的环境中使用Python 3.6(BTW,基本上是基于Docker的)
  • lib目录中安装应用依赖项,并使用dev_appserver.py进行本地开发仅适用于标准环境

以某种方式相关:How to tell if a Google App Engine documentation page applies to the standard or the flexible environment

答案 1 :(得分:1)

确定。我会写下我的发现,以防万一有像我这样的傻瓜。

首先,Dan's响应是正确的。我正在混合标准和灵活的环境。我已经找到了将Falcon框架与App Engine一起使用的方法;事实证明,唯一的文章使用标准环境。这就是我如何使用dev_appserver.py结束的。但是,我的应用程序是Python 3.6,并且具有防止降级到2.7的依赖关系。

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

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