Python ModuleNotFoundError:没有名为';django';部署到弹性豆茎时

Python ModuleNotFoundError:没有名为';django';部署到弹性豆茎时,python,django,python-3.x,amazon-web-services,amazon-elastic-beanstalk,Python,Django,Python 3.x,Amazon Web Services,Amazon Elastic Beanstalk,我一直在本地处理Django项目,最终决定将其发布到AWS Elastic Beanstalk,在部署过程中,我不断收到一个错误消息,上面说: 从django.core.wsgi导入获取\u wsgi\u应用程序 没有名为“django”的模块 我已经浏览了官方文件以及我已经验证了Django实际上是通过运行pip freeze安装的,然后它返回 colorama==0.3.9 Django==2.2.9 django芹菜==3.3.1 我也在当地广泛地与Django合作。但是为了确保我运行

我一直在本地处理Django项目,最终决定将其发布到AWS Elastic Beanstalk,在部署过程中,我不断收到一个错误消息,上面说:

从django.core.wsgi导入获取\u wsgi\u应用程序

没有名为“django”的模块

我已经浏览了官方文件以及我已经验证了Django实际上是通过运行
pip freeze
安装的,然后它返回

colorama==0.3.9

Django==2.2.9

django芹菜==3.3.1

我也在当地广泛地与Django合作。但是为了确保我运行了下面的命令并得到了这个输出

(.venv)$source.venv/bin/activate

(.venv)$pip安装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安装在我的本地机器上,而不是远程机器上。此外,我注意到了这一点,并确保我的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()

如果您有任何帮助,我们将不胜感激,因为这是我第一次使用此工具,我想我在某个地方犯了一个非常愚蠢的错误。

为了回答您的问题,在使用AWS ElasticBeanstalk(EBS)部署Django或flask或dash应用程序时,您几乎不需要检查一些东西

注意:如果应用程序是使用AWS EBSCLI托管的,即EBS的命令行功能,而不是通过AWS帐户上的EBS用户界面托管的方法,则概述以下步骤根据我个人的经验,我发现托管应用程序的UI方法不适用于flask、Django或dash应用程序。

  • 将应用程序托管到EBS时,如果有任何错误,请检查托管日志。即使EBS提示您已成功托管应用程序,您也必须交叉检查日志以查找任何错误
  • 验证步骤1中没有错误后,导航到EBS应用程序的日志控制台,下载整个日志,然后检查是否存在任何其他错误。如果你有任何错误,你必须先改正
  • 既然您已经说过AWS Linux机器无法导入Django包,那么您可能是在另一个虚拟环境下手动检查Django包,而AWS EBS在另一个虚拟环境下托管了您的应用程序
  • 为了解决步骤3,任何在linux服务器上使用AWS EBS托管的应用程序都托管在以下虚拟环境路径下。
    /opt/python/run/venv/bin
    。为了验证这一点,只需在连接到linux服务器后键入命令
    cd/opt/python/run/venv/bin
    。一旦您能够导航到此路径,请尝试通过提供
    source./activate来激活virtualenv
  • 一旦激活了AWS EBS为您的应用程序创建的此virtualenv,请尝试在此virtualenv内启动
    python
    ,然后尝试导入django
    。如果发现django软件包未安装在此virtualenv下,则必须手动安装,因为托管应用程序将引用此virtualenv。任何需要被托管应用程序引用的新包都必须仅在此virtualenv下安装
  • 为了进一步向您提供更多信息,您的托管应用程序将驻留在AWS linux服务器上的此目录下
    /opt/python/bundle/2/app
    。如果您将来愿意更改应用程序代码或任何支持文件,可以参考此目录。例如,如果要更改任何源代码,可以直接编辑此存储库下的源代码文件,然后重新启动服务器以使更改生效
  • 更新: 由于您已指定在托管应用程序期间,您收到了django包not found上的错误,请按照以下步骤更正此错误

  • 创建
    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
    中删除