![](/img/trans.png)
[英]python/django - "Cannot use ImageField because Pillow is not installed"
[英]ElasticBeanstalk suddenly starts failing to deploy Django App with "Cannot use ImageField because Pillow is not installed" exception
我正在使用彈性 beantalk 來部署我的 Django 應用程序。 今天它突然停止工作,應用程序方面沒有任何重大更改(我已經更改了一些模板,僅此而已)。
嘗試部署應用程序 10 分鍾后部署超時,但沒有任何反應。
我可以在日志中看到的唯一或多或少有用的提示是:
[2020-02-20T15:00:20.437Z] INFO [19057] - [Application update .../postbuild_0_myproject/Command 01_migrate] : Activity execution failed, because: SystemCheckError: System check identified some issues:
ERRORS:
education.Author.photo: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
education.Course.cover_image: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
education.CourseCategory.icon_image: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "pip install Pillow".
Using staging settings
App receivers connected
(ElasticBeanstalk::ExternalInvocationError)
[2020-02-20T15:00:20.437Z] INFO [19057] - [Application update .../postbuild_0_myproject/Command 01_migrate] : Activity failed.
[2020-02-20T15:00:20.437Z] INFO [19057] - [Application update .../postbuild_0_myproject] : Activity failed.
[2020-02-20T15:00:20.437Z] INFO [19057] - [Application update ...] : Activity failed.
[2020-02-20T15:00:20.507Z] INFO [19057] - [Application update app-9a24-200220_145942-stage-200220_145942@142/AppDeployStage0/EbExtensionPostBuild] : Activity failed.
[2020-02-20T15:00:20.507Z] INFO [19057] - [Application update app-9a24-200220_145942-stage-200220_145942@142/AppDeployStage0] : Activity failed.
[2020-02-20T15:00:20.508Z] INFO [19057] - [Application update app-9a24-200220_145942-stage-200220_145942@142] : Completed activity. Result:
Application update - Command CMD-AppDeploy failed
但是我已經在requirements.txt
有 Pillow 並且上面的日志說:
Requirement already satisfied: Pillow==6.2.1 in /opt/python/run/venv/lib64/python3.6/site-packages (from -r /opt/python/ondeck/app/requirements.txt (line 51))
我該如何解決和解決這個問題? 我怎樣才能在未來避免類似的問題? 我真的很害怕同樣的問題可能會在生產環境中隨機出現。
以下是有關配置的更多信息:
這是我在.ebextensions
:
01_packages.config
:
packages:
yum:
git: []
postgresql93-devel: []
db-migrate.config
container_commands:
01_migrate:
command: "django-admin.py migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: myproject.settings
django.config
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: myproject/wsgi.py
wsgi_custom.config
files:
"/etc/httpd/conf.d/wsgihacks.conf":
mode: "000644"
owner: root
group: root
content: |
WSGIPassAuthorization On
這是使用ImageField
模型/表單時 Django 的一個痛苦和已知問題。 由於 Python 的動態導入系統,當我第一次遇到它時,它會突然出現並讓我惱火。
我通常解決這個問題的方法是使用conda及其等效的 virtualenv 來確保使用正確的解釋器(帶有我的包的解釋器)。
如果您沒有使用 virtualenv 或等效工具,請立即設置一個,如果您已經在使用,則檢查您是否正在使用pip3 install pillow
- pip3
在這里很重要,因為在 debian(和許多其他)系統上,正常的pip
只會為 python 2.x 安裝。
使用 conda 將確保在生產中不會發生這種情況,但我也會將它添加到部署時要測試的事項清單中 - 檢查正確版本的枕頭設置和工作。
我有兩個具有相同問題的 Elastic Beanstalk 環境(一個 Web 層環境和一個工作環境)。
其中一個問題是通過重新啟動環境解決的。
另一個在任何操作時都無法重新啟動並超時。 我設法通過轉到配置 > 容量並將最小和最大實例數更改為 0 來修復這個問題。我已應用更改,等待它們應用,然后返回最小和最大實例數的先前值。
這解決了問題。
我仍然不知道是什么導致了這個問題,並希望收到一些評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.