簡體   English   中英

將簡單的 web 應用程序部署到 Elastic Beanstalk 時沒有名為“應用程序”的模塊出錯

[英]No module named 'application' Error while deploying simple web app to Elastic Beanstalk

我正在使用本教程和它們具有的相同“application.py”文件將 web 應用程序部署到彈性 beanstalk: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask。 html#python-flask-setup-venv

我在訪問該站點時收到 502 錯誤,並且環境運行狀況下降/嚴重。 當我檢查日志時,我看到了這個(我認為這是問題的根源):

Jun 19 22:05:18 ip-172-31-15-237 web: File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
Jun 19 22:05:18 ip-172-31-15-237 web: return _bootstrap._gcd_import(name[level:], package, level)
Jun 19 22:05:18 ip-172-31-15-237 web: File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
Jun 19 22:05:18 ip-172-31-15-237 web: File "<frozen importlib._bootstrap>", line 983, in _find_and_load
Jun 19 22:05:18 ip-172-31-15-237 web: File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
Jun 19 22:05:18 ip-172-31-15-237 web: ModuleNotFoundError: No module named 'application'

這是我的 application.py 文件:


from flask import Flask

# print a nice greeting.
def say_hello(username = "World"):
    return '<p>Hello %s!</p>\n' % username

# some bits of text for the page.
header_text = '''
    <html>\n<head> <title>EB Flask Test</title> </head>\n<body>'''
instructions = '''
    <p><em>Hint</em>: This is a RESTful web service! Append a username
    to the URL (for example: <code>/Thelonious</code>) to say hello to
    someone specific.</p>\n'''
home_link = '<p><a href="/">Back</a></p>\n'
footer_text = '</body>\n</html>'

# EB looks for an 'application' callable by default.
application = Flask(__name__)

# add a rule for the index page.
application.add_url_rule('/', 'index', (lambda: header_text +
    say_hello() + instructions + footer_text))

# add a rule when the page is accessed with a name appended to the site
# URL.
application.add_url_rule('/<username>', 'hello', (lambda username:
    header_text + say_hello(username) + home_link + footer_text))

# run the app.
if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    #application.debug = True
    application.run()

這是我的 requirements.txt 文件:

click==7.1.2
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
numpy==1.16.3
pandas==0.24.2
python-dateutil==2.8.1
pytz==2020.1
six==1.15.0
Werkzeug==1.0.1

我上傳到 elastic beanstalk 的壓縮文件夾僅包含這兩個文件。 我在那里也有一個虛擬環境,但是教程說你不需要它所以我把它去掉了。

我也在運行 Python 3.7.1,所以我有 pip3。 我應該注意到,當我運行 python 代碼時,web 應用程序可以正常工作。

一個可能的原因是使用了Amazon Linux 2環境,而不是Amazon Linux 1

python 環境及其 linux 分布列表在這里

從您提供的鏈接:

在本教程中,我們使用 Python 3.6和相應的 Elastic Beanstalk 平台版本。

The Python 3.6 is supported in Amazon Linux 1 environment, while you are using Python 3.7 which is for Amazon Linux 2 environment.

AL1 和 AL2 之間存在許多差異,這使得它們不兼容

我和你有同樣的問題。 降級到 AL1 確實解決了這個問題,但帶來了更多問題。

我發現您可以通過在文件末尾添加以下行來使您的應用程序兼容。

app = application

或者,您可以在定義 flask 實例時執行此操作:

application = app = Flask(__name__)如果需要,不要忘記將兩者都導入到 application.py 中。

這是因為 aws 需要將 Flask 實例稱為應用程序,但 gunicorn 需要將 Flask 實例稱為應用程序,所以這樣你就可以讓他們都開心。

世界上的每個人都稱那里為 Flask 實例應用程序執行 aws 顯然。

在彈性 beanstalk 上部署我的 flask 應用程序時,我必須做件事來解決No module named 'application'錯誤:

  1. 正如Quinten Cabo提到的,我重命名了app變量:
application = app = Flask(__name__)
  1. 此外,我需要將包含應用程序的 python 文件從app.py重命名為application.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM