我想让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,不管是什么......对吗?
答案 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
)。