解决 Django 下 PIL 无法找到 Jpeg 解码器的问题
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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。