首页 > 解决方案 > 使用 Zappa 部署 Django 应用程序时导入错误?

问题描述

使用 Zappa 将我的 Django 应用程序实例化为 lambda 函数时出现以下错误。

[1549659279288] Instancing..
[1549659279532] cannot import name 'models': ImportError
Traceback (most recent call last):
  File "/var/task/handler.py", line 580, in lambda_handler
  return LambdaHandler.lambda_handler(event, context)
  File "/var/task/handler.py", line 245, in lambda_handler
  handler = cls()
  File "/var/task/handler.py", line 151, in __init__
  wsgi_app_function = get_django_wsgi(self.settings.DJANGO_SETTINGS)
  File "/var/task/zappa/ext/django_zappa.py", line 9, in get_django_wsgi
  from django.core.wsgi import get_wsgi_application
  File "/var/task/django/core/wsgi.py", line 2, in <module>
  from django.core.handlers.wsgi import WSGIHandler
  File "/var/task/django/core/handlers/wsgi.py", line 8, in <module>
  from django.core.handlers import base
  File "/var/task/django/core/handlers/base.py", line 7, in <module>
  from django.urls import get_resolver, set_urlconf
  File "/var/task/django/urls/__init__.py", line 1, in <module>
  from .base import (
  File "/var/task/django/urls/base.py", line 8, in <module>
  from .exceptions import NoReverseMatch, Resolver404
  File "/var/task/django/urls/exceptions.py", line 1, in <module>
  from django.http import Http404
  File "/var/task/django/http/__init__.py", line 5, in <module>
  from django.http.response import (
  File "/var/task/django/http/response.py", line 13, in <module>
  from django.core.serializers.json import DjangoJSONEncoder
  File "/var/task/django/core/serializers/__init__.py", line 23, in <module>
  from django.core.serializers.base import SerializerDoesNotExist
  File "/var/task/django/core/serializers/base.py", line 6, in <module>
  from django.db import models
ImportError: cannot import name 'models'

我尝试使用在本地运行该应用程序,

python manage.py runserver

它在本地运行良好。但是,当应用程序部署到 lambda 函数时,出现上述错误。

我正在使用 Django 版本 2.0.10、Python 3.6 以及 AWS Aurora RDS。

我希望 lambda 函数实例以与本地相同的方式没有错误。

标签: djangodjango-rest-frameworkzappapython-zappa

解决方案


部署后调用 zappa 以保留打包的 zip 并检查文件夹结构或尝试从该文件夹运行项目。

您是否将 Django 添加到需求文件中?我记得 Zappa 从全新的虚拟环境中重建 lambda 包,安装 requirements.txt 并应用您的文件夹。

或者仔细检查 cloudwatch 日志中的导入错误。只有在部署后刷新容器时才会出现导入错误,而不会出现在每个 lambda 调用中。


推荐阅读