Ошибка Django: невозможно использовать ImageField, потому что Pillow не установлен
В настоящее время я учусь использовать Django для разработки веб-сервиса. Проходя онлайн-курс по Udemy, я столкнулся с проблемой использования ImageField в models.py. Моя проблема в том, что когда я выполняю команду runserver, Django показывает следующую ошибку, хотя я почти уверен, что библиотека Pillow установлена.
В models.py у меня есть следующий код:
from django.db import models
from django.contrib.auth.models import User
class UserProfileInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT)
portfolio = models.URLField(blank=True)
picture = models.ImageField(upload_to="profile_pics")
def __str__(self):
return user.self.username
Когда я запускаю сервер, я получаю следующую ошибку: python manage.py runserver Выполнение системных проверок...
Unhandled exception in thread started by <function check_errors<locals>.wrapper at 0x10407b6a8>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 121, in inner_run
self.check(display_num_errors=True)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/django/core/management/base.py", line 410, in check
raise SystemCheckError(msg)
django.core.management.base.SystemCheckError: SystemCheckError: System check
identified some issues:
ERRORS:
first_app.UserProfileInfo.picture: (fields.E210) Cannot use ImageField because
Pillow is not installed.
HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command "pip
install Pillow".
System check identified 1 issue (0 silenced).
Итак, следуя сообщению, я проверил установленные модули, используя метод, представленный здесь: Как я могу получить список локально установленных модулей Python?, Следующий код запускается в файле в том же каталоге, что и manage.py. Я использую Pycharm для использования виртуальной среды, поэтому я предполагаю, что я использую ту же среду, что и проект Django, когда я запускаю сервер.
В результате описанного выше способа я увидел, что подушка установлена, вот так:
['argon2 == 0.1.10', 'bcrypt == 3.1.4', 'cffi == 1.11.5', 'django == 2.0.5', 'faker == 0.8.15', 'olefile == 0.45.1 ',' pillow == 5.0.0 ',' pip == 9.0.1 ',' pycparser == 2.18 ',' python-dateutil == 2.7.3 ',' pytz == 2018.4 ',' setuptools == 28.8.0 ',' six == 1.11.0 ',' text-unidecode == 1.2 ']
Как я могу исправить эту проблему? Или есть ли альтернатива использованию изображений в Django без Pillow?
1 ответ
Я столкнулся с этой проблемой в контейнере докеров. Pillow не установится без поддержки заголовков jpeg и zlib и библиотеки, поэтому я добавил в сборку zlib-dev и jpeg-dev, а затем удалил их после установки Pillow. Конечно, тогда Pillow отказался импортировать, потому что отсутствуют libjpeg и друзья. Решением было добавить обратно соответствующие (не относящиеся к разработчикам) пакеты, и все заработало как надо.
Чтобы определить virtualenv для вашего проекта в pycharm, сначала перейдите по этому пути:
Файл -> Настройки -> Проект -> Интерпретатор проекта
Теперь вы можете увидеть все проекты, которые открыты в Pycharm. выберите нужный проект и нажмите кнопку конфигурации Project Interpreter, затем выберите Добавить локальный интерпретатор Python. в этой форме выберите Существующая среда. Теперь в кнопке внутри Интерпретатора вы можете выбрать желаемое virtualenv (myvirtualenv -> bin -> python3.x)
Я не знаю конкретных причин, но, похоже, я нашел решение для ситуации, когда virtualenv, созданный PyCharm, не распознается терминалом в PyCharm. Решение состоит в том, чтобы создать virtualenv с помощью библиотеки virtualenv в простом python и установить ее в качестве интерпретатора проекта в PyCharm, а не создавать virtualenv через PyCharm.