Джанго и Пил на снежном барсе - PullRequest
2 голосов
/ 02 сентября 2010

Я пытаюсь заставить PIL работать с Django 1.2.1 и Python 2.7 на Snow Leopard

Я следовал инструкциям, которые нашел здесь на SO, и я должен делать это правильно.

Import и selftest.py работают нормально, и я сохраняю и открываю изображения в интерактивном питоне, но Django не может его использовать.

Я получаю ошибку

The _imaging C module is not installed

С какой стати PIL, кажется, работает везде, кроме Django? Я просто не имеет никакого смысла.

Я даже пытался переустановить Django после установки libjpeg и PIL, но безрезультатно, что я делаю не так?

EDIT: Я только что обнаружил что-то странное. Я могу нормально открывать и сохранять изображения, используя интерактивный питон в терминале. Но по какой-то причине, когда я сохраняю изображение, цвета инвертируются!

Используемый код:

im = Image.open("/Users/Me/Downloads/9.jpg")
im.save("/Users/Me/Downloads/8.jpg")

Это дает какие-то подсказки относительно того, почему это вообще не работает в Django?

РЕДАКТИРОВАТЬ 2: Не обращая внимания, что последняя часть, кажется, что jpg, который я выбрал, был с цветами CMYK, и это не может быть сохранено непосредственно как RGB или что-то в этом роде.

РЕДАКТИРОВАТЬ 3: И опять же, может быть, это правильно, что Джанго смотрит не в том месте.

Exception Location: /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/PIL/Image.py in __getattr__, line 36
Python Executable:  /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Python Version: 2.7.0

Это то, что Джанго выпускает. Я просто посмотрел на версию, глупый я. В верхней строке четко указано, что он смотрит в 2,5 пути. Интересно, почему его 2,5, так как SL должен родиться с 2,6, да ладно, неважно.

Может кто-нибудь сказать мне, как направить Django использовать более новые? Решение с изменением manage.py ничего не сделало. Почему это, это должно было сказать Django использовать 2.7, несмотря ни на что .. правильно?

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Я написал довольно обширное руководство о том, как получить PIL, libjpeg для работы на Snow leopard. Может быть, это поможет вам.

http://appelfreelance.com/2010/06/libjpeg-pil-snow-leopard-python2-6-_jpeg_resync_to_restart/

Если у вас этого нет, сначала скачайте его.

http://www.ijg.org/files/jpegsrc.v7.tar.gz

войдите в среду оболочки и распакуйте, выполнив следующую команду

tar -zxvf jpegsrc.v7.tar.gz


cd jpeg-7

then run

sudo make clean
sudo CC="gcc -arch i386"./configure --enable-shared --enable-static
sudo make
sudo make install

Далее возьмите PIL и распакуйте его

http://effbot.org/downloads/Imaging-1.1.6.tar.gz
tar -zxvf Imaging-1.1.6.tar.gz
cd Imaging-1.1.6

Если у вас уже есть PIL, я бы порекомендовал запустить

sudo rm -Rf build

для очистки любых существующих сборок, это вызвало у меня массу ошибок и седых волос!

в вашем файле setup.py запустите find JPEG_ROOT

изменить его так, чтобы он выглядел следующим образом

JPEG_ROOT = libinclude("/usr/local")

Далее перейти к сборке

sudo python setup.py build

если libjpeg успешно установлен, вы сможете запускать python selftest.py без каких-либо ошибок, связанных с «jpeg»

sudo python setup.py install

если все сработало успешно, вы сможете войти в свой интерпретатор python, выполнив python в командной строке, а также сделать следующее:

import PIL
import Image
import _imaging

без ошибок.

Просто для тройной проверки у меня есть простой jpeg на рабочем столе.

image = Image.open(“/Users/MyName/Desktop/myimage.jpeg”)
image.save(“/Users/MyName/Desktop/test.jpeg”)

должно работать без ошибок

0 голосов
/ 02 сентября 2010

Убедитесь, что ваш код Django ссылается на ту же версию Python, которую вы используете «везде». Snow Leopard поставляется с Python 2.6.1 по умолчанию, который находится на /usr/bin/python.

Если вы установили Python 2.7 каким-либо другим способом, он, вероятно, находится по другому пути с символической ссылкой /usr/bin/python2.7, указывающей на его фактическое местоположение. Если PIL установлен под Python 2.7, то вы не можете ссылаться на /usr/bin/python в своем коде, потому что это указывает на неправильную версию Python.

Рекомендуется явно указать, что вы хотите использовать Python 2.7 в шебанге (#!/usr/bin/env python2.7) для сценария инициализации Django (например, manage.py).

...