Джанго не находит Подушку, хотя установлена - PullRequest
0 голосов
/ 01 июня 2019

Джанго пытается найти Подушку , и я не совсем уверен, почему.

Среда

Образ Docker для Linux Alpine, Django 2.2.Вот соответствующие части:

Файл Docker

RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev jpeg-dev zlib-dev \
    && apk add --no-cache mariadb-dev mariadb-client

# install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
RUN pip install mysqlclient
COPY ./Pipfile /usr/src/cms/Pipfile
RUN pipenv install --skip-lock --system --dev
RUN apk del build-deps

Pipfile

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
django = "==2.2"
markdown = "==3.1.1"
pillow = "==5.0.0"

[requires]
python_version = "3.6"

Проблема

Когда я запускаю python manage.py runserver 0.0.0.0:8000 изя получаю следующую ошибку:

django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:

ERRORS:
website.Photo.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".

, что странно , потому что pip install Pillow дает мне

Requirement already satisfied: Pillow in /usr/local/lib/python3.7/site-packages (5.4.1)

О конфликте Подушки с PIL

Взглянув на /usr/local/lib/python3.7/site-packages, я заметил, что у меня есть и PIL и Подушка .Является ли это:

  1. источником конфликта ( документация Подушки ) достаточно конкретно о необходимости удалить PIL
  2. использование подушкисамого названия PIL для обеспечения совместимости, как это предлагается в этом обсуждении ?

Из фактов, что я) pip uninstall PIL -> not installed ii) print(PIL.PILLOW_VERSION) -> 5.0.0 в оболочке python и что iii) Django использует from PIL import Image source , я бы пошел на гипотезу 2. Так что, если Pillow установлена ​​в контейнере, почему Django не находитэто?

Текущий путь

>>> from PIL import Image
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.7/site-packages/PIL/Image.py", line 58, in <module>
    from . import _imaging as core
ImportError: Error loading shared library libjpeg.so.8: No such file or directory (needed by /usr/local/lib/python3.7/site-packages/PIL/_imaging.cpython-37m-x86_64-linux-gnu.so)

Я добавил jpeg-dev в Dockerfile, но, как-то, этого кажется недостаточно.Все еще копаю.Спасибо за любую подсказку

1 Ответ

1 голос
/ 01 июня 2019

Оказывается, jpeg-dev (требуется компиляцией) было недостаточно для удовлетворения всех зависимостей во время выполнения. Добавление libjpeg решило проблему. Обновлен Dockerfile

# install mysqlclient
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev jpeg-dev zlib-dev \
    && apk add --no-cache mariadb-dev mariadb-client

# install dependencies
RUN pip install --upgrade pip
RUN pip install pipenv
RUN pip install mysqlclient
RUN apk add libjpeg      -------------> et voila
COPY ./Pipfile /usr/src/cms/Pipfile
RUN pipenv install --skip-lock --system --dev
RUN apk del build-deps
...