我正在使用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。
答案 0 :(得分:1)
您似乎正在混淆GAE标准和灵活的环境:
lib
目录中安装应用依赖项,并使用dev_appserver.py
进行本地开发仅适用于标准环境答案 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轻松生成需求文件。