我一直在本地处理Django项目,最后我决定将其发布到AWS Elastic Beanstalk,并且在部署过程中,我不断收到错误消息:
从django.core.wsgi导入get_wsgi_application
没有名为“ django”的模块
我已经遍历了官方tutorial from AWS和tutorial from the Real Python,并且已经通过运行pip freeze
验证了Django实际上已经安装并且返回了
...
colorama == 0.3.9
Django == 2.2.9
django-celery == 3.3.1
....
我也一直在本地与Django广泛合作。但是只是为了确保我运行了以下命令并获得了此输出。
(。venv)$ source .venv / bin / activate
(。venv)$ pip安装Django
已满足要求:./。venv / lib / python3.7 / site-packages(2.2.9)中的django
已满足要求:./。venv / lib / python3.7 / site-packages中的sqlparse(来自django)(0.3.0)
已满足要求:./.venv/lib/python3.7/site-packages中的pytz(来自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是安装在我的本地计算机上,而不是安装在我的远程计算机上。此外,我注意到了这个post,并确保我的requirements.txt文件也位于我的根目录中。您可能会在下面找到一些其他信息。
.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()
任何帮助将不胜感激,因为这是我第一次使用它,我想我在某个地方犯了一个非常愚蠢的错误。
答案 0 :(得分:0)
很好地回答您的问题,在使用AWS ElasticBeanstalk(EBS)部署Django或flask或dash应用程序时,您需要检查的东西很少。
注意::如果应用程序是使用AWS EBSCLI托管的,则概述了以下步骤,即EBS的命令行功能,而不是通过AWS帐户上EBS的用户界面托管的方法。 以我的亲身经历,我发现托管应用程序的UI方法不适用于flask,Django或dash应用程序。
/opt/python/run/venv/bin
。为了验证这一点,只需在连接到Linux服务器后键入命令cd /opt/python/run/venv/bin
。一旦能够导航到该路径,请尝试通过提供source ./activate
python
,然后尝试import django
。如果发现在此virtualenv下未安装django软件包,则必须手动安装它,因为这是托管应用程序将引用的virtualenv。托管应用程序需要引用的所有新软件包都必须仅安装在此virtualenv下。/opt/python/bundle/2/app
下的AWS linux服务器上。如果以后愿意更改应用程序代码或任何支持文件,则可以参考此目录。例如,如果要更改任何源代码,则可以直接在此存储库下编辑源代码文件,然后重新启动服务器以使更改生效。更新: 由于您已指定在托管应用程序期间,在django软件包上收到了未找到的错误,请按照以下步骤更正此错误。
requirements.txt
文件时,请确保该文件中仅包含应用程序所需的软件包。当您执行pip freeze requirements.txt
时,当前环境中存在的所有软件包都将在requirements.txt
文件中进行输入。在AWS EBS尝试安装此文件时,这可能会产生错误。原因是,例如,PackageA和PackageB可能是PackageC的从属程序包。如果安装PackageC,将自动安装PackageA和PackageB。话虽如此,您必须删除requirements.txt
文件中的PackageA和PackageB并仅保留PackageC。因为安装PackageC会自动安装依赖的软件包,即PackageA和PackageB。因此,为了简短起见,您只需要将使用pip install
手动安装的软件包包括在requirements.txt
文件中的本地计算机中。所有其他软件包都是这些软件包的从属软件包,并在安装主软件包时自动安装。因此,需要从requirements.txt
中删除这些从属程序包。cd /opt/python/run/venv/bin
导航到虚拟环境路径,使用source ./activate
激活它,调用python
解释器,然后尝试手动导入软件包。如果发现任何软件包已卸载,则可以手动安装它们,然后重新启动服务器以使更改生效。有关更多详细信息,您可以参考此link。尽管这是为托管Flask应用程序而创建的,但托管django应用程序也可以在同一行上工作。