Django和PIL在雪豹上

时间:2010-09-02 10:23:40

标签: python django osx-snow-leopard python-imaging-library

我想让PIL在Snow Leopard上使用Django 1.2.1和Python 2.7

我已按照我在此处找到的说明操作,我应该这样做。

导入和selftest.py工作正常,我在交互式python中保存并打开图像,但Django无法使用它。

我收到错误

The _imaging C module is not installed

除了Django之外,为什么PIL似乎无处不在?我没有任何意义。

我甚至尝试在安装libjpeg和PIL后重新安装Django,但没有结果,我做错了什么?

修改 我刚刚发现了一些奇怪的东西。通过在终端中使用交互式python,我可以打开并保存图像。但出于某种原因,当我保存图像时,颜色会反转!

使用的代码是:

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

是否有任何线索可以解释为什么它在Django中根本不起作用?

编辑2: 没关系,最后一部分,似乎我选择的jpg,是用CMYK颜色,并且不能直接保存为RGB或类似的东西。

编辑3: 再说一遍,也许Django正在寻找错误的地方是正确的。

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

这就是Django推出的内容。我只是看着版本,傻乎乎的我。顶线清楚地表明它正在寻找2.5路径。不知道为什么它的2.5自SL应该诞生2.6,哦,好吧,无论如何。

然后有人可以告诉我如何指导Django使用新的吗?改变manage.py的解决方案什么也没做。为什么这样,应该告诉Django使用2.7,不管是什么......对吗?

2 个答案:

答案 0 :(得分:1)

我写了一篇非常广泛的教程,介绍如何使用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

通过运行以下

进入shell环境并解压缩
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”)

应该没有错误

答案 1 :(得分:0)

确保您的Django代码引用了您在其他地方使用的相同版本的Python。默认情况下,Snow Leopard附带了Python 2.6.1 /usr/bin/python

如果您通过其他方式安装了Python 2.7,则可能会在/usr/bin/python2.7处指向其实际位置的符号链接的另一条路径中找到它。如果在Python 2.7下安装了PIL,那么你就无法在代码中引用/usr/bin/python,因为这会指向你错误的Python版本。

最佳做法是明确指定您希望在shebang(#!/usr/bin/env python2.7)中使用Python 2.7作为Django初始化脚本(例如manage.py)。