ModuleNotFoundError: при развертывании в Elasti c Beanstalk модуль с именем 'django' отсутствует - PullRequest
0 голосов
/ 23 января 2020

Я работал над проектом Django локально, и я наконец решил выпустить его для AWS Elasti c Beanstalk, и в процессе развертывания я получаю сообщение об ошибке:

из django .core.wsgi import get_wsgi_application

Нет модуля с именем 'django'

Я прошел официальный учебник от AWS а также учебник от Real Python Я проверил, что Django фактически установлен, запустив pip freeze и возвращает

...

колорама == 0.3.9

Джанго == 2.2.9

django -целий == 3.3.1

....

Также я много работал с Django локально. Но просто чтобы убедиться, что я выполнил следующую команду и получил этот вывод:

(. Venv) $ source .venv / bin / activ

(. Venv) $ pip install django

Требование уже выполнено: django in ./.venv/lib/python3.7/site-packages (2.2.9)

Требование уже выполнено: sqlparse in. /.venv/lib/python3.7/site-packages (от django) (0.3.0)

Требование уже выполнено: pytz in ./.venv/lib/python3.7 / site-packages (от django) (2019.3)

И когда я запускаю:

(.venv) $ python
Python 3.7.4 (default, Jul  9 2019, 18:13:23) 
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print(django.__file__)
.../code/core_web_app/.venv/lib/python3.7/site-packages/django/__init__.py

Извините, если это закончилось, но большую часть поста я посмотрел У вас есть комментарии, спрашивающие, установлен ли Django или говорящий, что Django должен быть установлен. Я предполагаю, что Django установлен на моей локальной машине, но не на моем пульте. Кроме того, я отметил эту запись и убедился, что мой файл require.txt также находится в моей директории root. Ниже вы можете найти дополнительную информацию.

.ebextensions / django .config

    option_settings:
  "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "myapp.settings"
    "PYTHONPATH": "/opt/python/current/app/src:$PYTHONPATH"
  "aws:elasticbeanstalk:container:python":
    WSGIPath: src/myapp/wsgi.py
    NumProcesses: 3
    NumThreads: 20
  "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "www/static/"

src / myapp / wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')

application = get_wsgi_application()

Любая помощь будет принята с благодарностью, так как я впервые работаю с этим, и я предполагаю, что где-то совершаю действительно глупую ошибку.

1 Ответ

0 голосов
/ 23 января 2020

Хорошо, чтобы ответить на ваш вопрос, есть несколько вещей, которые вы должны проверить при развертывании приложения Django или flask или da sh с использованием AWS ElasticBeanstalk (EBS).

ПРИМЕЧАНИЕ: Описаны следующие шаги, если приложение размещено с использованием AWS EBSCLI, т.е. функция командной строки EBS, а не метод хостинга через пользовательский интерфейс EBS на ваш AWS аккаунт. По своему личному опыту я обнаружил, что способ размещения приложения в пользовательском интерфейсе не будет работать для приложений flask, Django или da sh.

  1. Хотя хостинг вашего приложения в EBS, проверьте журналы хостинга, если у вас есть какие-либо ошибки. Даже если EBS сообщит вам, что вы успешно разместили свое приложение, вам придется перепроверить журналы, чтобы найти какие-либо ошибки.
  2. После того, как вы убедились, что на шаге 1 ошибок нет, перейдите к журналам. консоль приложения EBS, загрузите целые журналы, а затем проверьте наличие других ошибок. Если у вас есть какие-либо ошибки, вы должны сначала их исправить.
  3. Теперь, когда вы сказали, что машина AWS Linux не может импортировать пакет Django, возможно, вы проверка пакета Django вручную в другой виртуальной среде, в то время как AWS EBS размещает ваше приложение в другой виртуальной среде.
  4. Для решения шага 3 оказывается, что любое приложение, размещенное с использованием AWS EBS на сервере linux размещается по следующему пути виртуальной среды. /opt/python/run/venv/bin. Чтобы убедиться в этом, просто наберите команду cd /opt/python/run/venv/bin после подключения к вашему linux серверу. Как только вы сможете перейти по этому пути, попробуйте активировать virtualenv, дав source ./activate
  5. Как только вы активировали это virtualenv, которое AWS EBS создал для вашего приложения, попробуйте запустить python внутри это virtualenv, а затем попробуйте import django. Если вы обнаружите, что пакет django не установлен под этим virtualenv, вам придется установить его вручную, так как это - virtualenv, к которому будет обращаться ваше размещенное приложение. И любые новые пакеты, на которые должно ссылаться ваше размещенное приложение, должны быть установлены только под этим virtualenv.
  6. Чтобы получить дополнительную информацию, ваше размещенное приложение будет находиться на сервере AWS linux. в этом каталоге /opt/python/bundle/2/app. Вы можете обратиться к этому каталогу, если вы хотите изменить свой код приложения или любые вспомогательные файлы в будущем. Например, если вы хотите изменить какой-либо исходный код, вы можете напрямую отредактировать файлы исходного кода в этом хранилище и перезапустить сервер, чтобы изменения вступили в силу.

Обновление: Поскольку вы указали, что во время хостинга приложения вы получили ошибку в пакете django, который не найден, выполните следующие действия, чтобы исправить эту ошибку.

  1. Хотя создавая файл requirements.txt, убедитесь, что в нем присутствуют только необходимые пакеты для вашего приложения. Когда вы делаете pip freeze requirements.txt, все пакеты, присутствующие в вашей текущей среде, сделают запись в файле requirements.txt. Это может привести к ошибкам, когда AWS EBS пытается установить этот файл. Причина, например, в том, что PackageA и PackageB могут быть зависимыми пакетами Package C. Если вы установите Package C, автоматически будут установлены PackageA и PackageB. Сказав это, вы должны удалить PackageA и PackageB в вашем файле requirements.txt и оставить только Package C. Поскольку установка Package C автоматически установит зависимые пакеты PackageA и PackageB. Таким образом, для краткости, вам нужно всего лишь включить пакеты, которые вы установили вручную с помощью pip install на локальном компьютере, в ваш файл requirements.txt. Все остальные пакеты будут зависимыми пакетами этих пакетов и будут установлены автоматически при установке главного пакета. Таким образом, эти зависимые пакеты должны быть удалены из requirements.txt.
  2. Если вы по-прежнему получаете ту же ошибку, после размещения приложения с ошибками попробуйте подключиться к компьютеру AWS Linux с помощью CLI (интерфейс командной строки), перейдите к пути виртуальной среды, выполнив команду cd /opt/python/run/venv/bin, активируйте его с помощью source ./activate, вызовите интерпретатор python и попробуйте импортировать пакеты вручную. Если вы обнаружите, что какой-либо из пакетов удален, вы можете установить их вручную и перезапустить сервер, чтобы изменения вступили в силу.

Для получения дополнительной информации вы можете обратиться по этой ссылке, Хотя он создан для размещения приложения flask, размещение приложения django также будет работать по тем же принципам.

...