Нет модуля с именем "приложение" Ошибка при развертывании простого веб-приложения в Elasti c Beanstalk - PullRequest
1 голос
/ 20 июня 2020

Я развертываю веб-приложение на beanstalk elasti c, используя это руководство и тот же файл application.py, который у них есть: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html#python - flask -setup-venv

Я получаю ошибку 502 при посещении сайта, и это ухудшает / серьезно влияет на состояние окружающей среды. Когда я проверяю журналы, я вижу следующее (которое, как я предполагаю, является root проблемы):

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

Заархивированная папка, которую я загружаю в elasti c beanstalk, состоит только из этих двух файлов. У меня тоже была виртуальная среда, но в руководстве говорится, что она вам не нужна, поэтому я избавился от нее.

Также я использую Python 3.7.1, поэтому у меня есть pip3. И я должен отметить, что веб-приложение работает, когда я просто запускаю код python.

1 Ответ

2 голосов
/ 20 июня 2020

Возможная причина - использование среды Amazon Linux 2 вместо Amazon Linux 1.

Список сред python и их linux дистрибутивов: здесь .

По предоставленной вами ссылке:

In в этом руководстве мы используем Python 3.6 и соответствующую версию платформы Elasti c Beanstalk.

Python 3.6 поддерживается в среде Amazon Linux 1, в то время как вы используете Python 3.7, который предназначен для среды Amazon Linux 2.

Между AL1 есть много различий и AL2, что делает их несовместимыми .

...