![](/img/trans.png)
[英]ModuleNotFoundError: No module named 'application' when deploying Flask app on AWS Elastic Beanstalk
[英]ModuleNotFoundError: No module named 'django' when deploying to Elastic Beanstalk
我一直在本地處理 Django 項目,最終決定將其發布到 AWS Elastic Beanstalk,在部署過程中,我不斷收到錯誤消息:
從 django.core.wsgi 導入 get_wsgi_application
沒有名為“django”的模塊
我已經瀏覽了來自 AWS的官方教程以及來自 Real Python的教程我已經通過運行pip freeze
驗證了 Django 實際上已安裝並返回
...
顏色==0.3.9
Django==2.2.9
django-芹菜==3.3.1
....
此外,我一直在本地廣泛使用 Django。 但為了確保我運行了以下命令並得到了這個輸出。
(.venv) $ 源 .venv/bin/activate
(.venv) $ pip install django
已經滿足要求:django in ./.venv/lib/python3.7/site-packages (2.2.9)
已滿足要求:./.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 安裝在我的本地機器上,但沒有安裝在我的遙控器上。 此外,我已經注意到這篇文章並確保我的 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 應用程序。
/opt/python/run/venv/bin
。 為了驗證這一點,只需在連接到 linux 服務器后鍵入命令cd /opt/python/run/venv/bin
。 一旦您能夠導航到此路徑,請嘗試通過提供source ./activate
激活 virtualenvpython
,然后嘗試import django
。 如果你發現 django 包沒有安裝在這個 virtualenv 下,你必須手動安裝它,因為這是你的托管應用程序將引用的 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
導航到虛擬環境路徑cd /opt/python/run/venv/bin
,使用source ./activate
激活它,調用python
解釋器,然后嘗試手動導入包。 如果您發現任何軟件包被卸載,您可以手動安裝它們並重新啟動服務器以使更改生效。有關更多詳細信息,您可以參考此鏈接。 盡管這是為托管 Flask 應用程序而創建的,但托管 django 應用程序也可以在同一行上工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.