2011-12-06 1 views
3

Я установил PIL с помощью PIP. Однако, используя PIL на Django, при попытке загрузить файл .jpg, я получаю ошибку:Ошибка в PIL, установленном с PIP - Django, Python

Upload a valid image. The file you uploaded was either not an image or a corrupted image.

Я читал в Интернете об этой ошибке и решение было удалить скомпилированные файлы для текущей ОС, затем снова используйте setup.py.

Однако, когда я установил PIL с PIP, у меня нет setup.py и нет папки с файлами, скомпилированными для моей конкретной ОС. Это Mac OSX Lion.

Обновление: у меня не было установленного libjpeg на моем компьютере. У меня есть это сейчас, и я пытаюсь изменить конфигурацию PIL, чтобы указать на библиотеку libjpeg.

ответ

3

Вы получаете эту ошибку, если PIL скомпилирован без поддержки jpeg. Я также получил это, когда каталог назначения не был доступен для записи.

После PIL обобщила, если вы читаете

JPEG support not available

библиотека для обработки файлов JPEG, или его части, отсутствуют. Исправьте это, просто установите библиотеку (в моем случае это был libjpeg62-dev) и снова запустите pip, возможно, внутри virtualenv. Если этого недостаточно, возможно, у вашей системы есть еще несколько причуд. Посмотрите на this post (ubuntuforums) для исправления.

+0

Да, проблема была в том, что библиотеки jpeg отсутствовали. Каков эффективный способ установки на Mac? –

+2

@ Vasco OK. Проверьте это: [Установка PIL для использования с Django в Mac OS X] (http://stackoverflow.com/questions/5075620/installing-pil-to-use-with-django-on-mac-os-x). В следующий раз будьте более точными в своих вопросах! – Paolo

+0

Вы правы. Спасибо за поддержку –

11

PIL необходимо найти библиотеки, такие как libjpeg и libz во время установки.

Мы столкнулись с теми же проблемами на нашем сервере и мы установили PIL общесистемного с использованием

aptitude install python-imaging 

Это быстро исправить, и это работает для нас.

Кроме того, поисковая система Google показывает это двумя способами, как исправить эту проблему, используя PIL.

first one является симлинкой libjpeg.so, libfreetype.so и libz.so от /usr/lib/x86_64-linux-gnu//usr/lib к

second one является использование пипа --no-install ключа, чтобы загрузить пакет, а затем изменить setup.py поставить правильные пути там

1. Call 'pip install -I pil --no-install' to download and unpack the PIL source into your build directory; 
2. Get into your build directory and edit setup.py; 
3. Find the line that says 'add_directory(library_dirs, "/usr/lib")' (line 214 here); 
4. Add the line 'add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu/")' afterwards; 
5. Call 'pip install -I pil --no-download' to finish the installation. 

Если у вас есть i386 arch, используйте i386-linux-gnu вместо x86_64-linux-gnu

+0

Спасибо за ценный комментарий. Я бы скорее установил его через автоматический установщик, такой как aptitude, чем компилировать библиотеки. Однако, что эквивалентно aptitude для Mac OS? –

+0

Работает также на Ubuntu. –

1

Является ли подходящим jpeg-декодером, установленным в вашей системе?

Проверьте this guide, чтобы узнать, как получить PIL, работающий на Ubuntu/Virtualenv.

+0

Спасибо. У меня не было много знаний о PIL и поэтому я устанавливал без установки предыдущих библиотек jpeg. –

2

Мое исправление заключается в том, чтобы убедиться, что у вас установлены пакеты libjpeg-dev и libpng-dev, прежде чем выполнить установку PIL PIL.

Sudo APT-получить установку libjpeg-DEV Libpng-DEV

вероятно будет делать. Затем pip получает PIL из источника, компилируется с поддержкой jpeg и png.

+0

Спасибо за ценный ответ. Однако, что эквивалентно apt-get для Mac OS X? Или, в общем, способ, которым я мог бы получить эти библиотеки от установщика и не собирать их? –

+0

Используйте 'brew' (homebrew) или' port' (macports). –

4

Если вы используете pip и virtualenv, тогда вам не нужно возиться с системными путями.

PIL установлен через пип имеет проблемы с поиском нужных библиотек на убунту 12.10 (а некоторые ранее) на x86_64

исправить:

# commands for recent debian/ubuntu 
sudo apt-get install libjpeg libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev 

for i in libjpeg.so libfreetype.so libz.so 
    do ln -s /usr/lib/x86_64-linux-gnu/$i $VIRTUAL_ENV/lib/ 
done 
pip uninstall pil 
pip install pil 
+0

Спасибо, человек, попробовав кучу решений, этот, наконец, работал. –

 Смежные вопросы

  • Нет связанных вопросов^_^