繁体   English   中英

AWS Elastic Beanstalk - Flask 应用程序无法导入自定义模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM