[英]AWS Elastic Beanstalk - Flask App Cannot Import Custom Module
我正在尝试使用 Python 3.6 在 AWS Elastic Beanstalk 上托管 Flask 应用程序,但无论我尝试什么,应用程序的 url 都会导致 500:内部服务器错误。
我的应用程序的结构如下:
myApp: -application.py -mytransformers.py -requirements.txt
我查看了日志,wsgi 找不到我需要的包含自定义 Scikit-learn 转换器 (mytransformers.py) 的单独 python 脚本:
AttributeError: Can't get attribute 'MyTransformer' on <module '__main__' (built-in)>
我需要这些,因为我在一个 S3 存储库中腌制了 Scikit-learn 模型,我在application.py
中导入了需要自定义转换器的模型。
我试图将这些转换器定义移动到我的主application.py
脚本中,但它仍然返回相同的错误。
我认为wsgi脚本无法找到这些transformer定义,我也没有找到很多有类似问题的人。
编辑 1
我尝试将__init__.py
文件添加到我的应用程序目录中,但仍然遇到相同的错误。 我想要做的是使用包含一些自定义转换器的 Pickle 加载 Scikit-Learn 管道,但是当我尝试加载它们时,它会抛出关于无法找到自定义转换器的错误,即使我在开始时导入了它们的脚本。 我尝试将转换器的类定义放在application.py
脚本中,但这仍然无法解决错误。
编辑 2
我几乎可以肯定错误出在使用 WSGI 管理 Flask 应用程序的 EB 中。 我的应用程序确实在本地运行,它只是 WSGI 似乎无法找到辅助函数。 我发现了一篇使用 Azure 的类似帖子,它有一个类似的 WSGI 没有找到应用程序文件中定义的函数的问题: Error with WSGI when deploying Flask App to Azure
我首先将一个名为__init__.py
的空白文件添加到您的应用程序的根目录。 现在application.py
的 Flask 应用application.py
无法检测到您的转换器,因为它们不在您的 Python 路径上,并且它们不属于同一包的一部分。
添加__init__.py
将使您的转换器可以使用: from mytransformers import MyTransformer
因为它将它们添加到应用程序包中。
编辑:它在本地运行吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.