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

我正在尝试在Python 3.6中的AWS Elastic Beanstalk上托管Flask应用程序,但是无论我如何尝试,该应用程序的URL都会导致500:Internal Server Error。

我的应用程序的结构如下:

myApp:
-application.py
-mytransformers.py
-requirements.txt

我看了一下日志,wsgi找不到我需要的单独的python脚本,其中包含自定义Scikit-learn转换器(mytransformers.py):

AttributeError: Can't get attribute 'MyTransformer' on <module '__main__' (built-in)>

我需要这些,因为我已经在导入自application.py且需要自定义转换器的S3存储库中腌制了Scikit学习模型。

我试图将这些转换器定义移到我的主要application.py脚本中,但仍返回相同的错误。

我认为wsgi脚本无法找到这些转换器定义,并且对于遇到类似问题的人来说,我也没有找到太多。

编辑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应用程序无法检测到您的转换器,因为它们不在您的python路径上,并且它们不属于同一软件包。

添加__init__.py将使您的变压器可以使用以下工具导入:
from mytransformers import MyTransformer,因为它将添加到应用程序包中。

编辑:它在本地运行吗?

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Ansible不从〜/ .aws / credentials读取凭证 - python

我正在用dynamic inventory运行ansible。使用aws configure命令设置aws cli时,具有动态invetory的ansible命令正常运行。但是我希望动态库存可以使用多个配置文件,因此我在~/.aws/credentials中添加了配置文件[personal] aws_access_key_id = XXXXXXXXXXXXX…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…