福窝网

家庭装修指南网站,使用 Django 构建 ...

↑我也要推荐

解决 Django 下 PIL 无法找到 Jpeg 解码器的问题

发布时间:2011-07-09 04:42:39, 关注:+5886, 赞美:+9, 不爽:+5

本文标签: 扇贝网 pil

原始出处: 扇贝网(一起背单词) 官方博客

操作系统 Ubuntu 11.04 64位
Django 1.2.3
Python 2.7.1
VirtualEnv 1.4.9

问题描述

利用ImageField上传图片时总是出现
“请上传有效图片….”
英文信息是 “Upload a valid image. The file you uploaded was either not an image or a corrupted image.”

后检查发现是PIL问题,无法找到libjpeg,即便使用apt-get 重装libjpeg62-dev也无济于事,因为PIL 无法找到libjpeg。

最简单的办法,就是加一个软链接,把libjpeg的so文件链接到PIL能找到的地方,譬如/usr/lib

问题解决

1. 删除已有PIL

pip uninstall PIL

2. 安装libjepg-def(最好重装一遍)

sudo apt-get install libjpeg62-dev

3. 加软链接(libjpeg的路径是通过Ubuntu的Synaptic管理器找到的)

sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so

可以顺便把libz也加上

sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/libz.so

4. 下载PIL,自己编译

python setup.py build_ext -i

结果中显示Jpeg和Zlib都已经找到了

--- JPEG support available
--- ZLIB (PNG/ZIP) support available

再 python setup.py install 即可正确安装

5. 最后通过Python命令行可以检验是否Jpeg解码器是否安装成功

>>> from PIL import _imaging as core
>>> core.jpeg_decoder
built -in function jpeg_decoder

最后是一个综合了以上步骤的脚本,请谨慎使用

#!/bin/sh

# remove existing PIL
pip uninstall PIL

# install libjpeg
sudo apt-get install libjpeg62-dev

# make soft links
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/libjpeg.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/libz.so

# download and install PIL
wget -c http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar xzvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py build_ext -i
python setup.py install

# if no errors is thrown up, jpeg_decoder was installed successfully
echo "from PIL import _imaging as core; core.jpeg_decoder"|python

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠