通过PIP安装的PIL出现错误 - Django,Python

3 投票
4 回答
4622 浏览
提问于 2025-04-17 07:48

我通过PIP安装了PIL这个库。但是在Django中使用PIL时,上传一个.jpg文件时出现了错误:

请上传一个有效的图片。你上传的文件要么不是图片,要么是损坏的图片。

我在网上查了一下这个错误,有个解决办法是删除当前操作系统的编译文件,然后再用setup.py重新安装。

不过,因为我是通过PIP安装的PIL,所以我没有setup.py文件,也没有针对我这个操作系统的编译文件夹。我用的是Mac OSX Lion。

更新:我发现我的电脑上没有安装libjpeg库。现在我已经安装了,并且正在尝试修改PIL的配置,让它指向libjpeg库。

4 个回答

4

如果你在用pip和virtualenv,那就不用去搞系统路径了。

通过pip安装的PIL在ubuntu 12.10(还有一些早期版本)上,可能会找不到相关的库,尤其是在x86_64架构上。

要解决这个问题:

# commands for recent debian/ubuntu
sudo apt-get install libjpeg libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev

for i in libjpeg.so libfreetype.so libz.so
    do ln -s /usr/lib/x86_64-linux-gnu/$i $VIRTUAL_ENV/lib/
done
pip uninstall pil
pip install pil
10

PIL在安装的时候需要找到一些库,比如libjpeg和libz。

我们在服务器上也遇到了同样的问题,于是我们使用了下面的命令全局安装了PIL:

aptitude install python-imaging

这个方法很简单,对我们来说有效。

另外,网上搜索这个问题也找到了两种解决方法。

第一种方法是把 libjpeg.solibfreetype.solibz.so/usr/lib/x86_64-linux-gnu/ 这个文件夹链接到 /usr/lib

第二种方法是使用pip的 --no-install 选项来下载这个包,然后修改setup.py文件,把正确的路径放进去。

1. Call 'pip install -I pil --no-install' to download and unpack the PIL source into your build directory;
2. Get into your build directory and edit setup.py;
3. Find the line that says 'add_directory(library_dirs, "/usr/lib")' (line 214 here);
4. Add the line 'add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu/")' afterwards;
5. Call 'pip install -I pil --no-download' to finish the installation.

如果你使用的是i386架构,就用 i386-linux-gnu 替代 x86_64-linux-gnu

2

如果你的PIL(Python Imaging Library)没有编译JPEG支持,就会出现这个错误。我也遇到过这个问题,是因为目标文件夹没有写入权限。

一旦PIL编译完成,如果你看到

JPEG支持不可用

这说明处理JPEG文件的库,或者其中的一部分,缺失了。解决这个问题的方法就是安装相关的库(在我的情况下是libjpeg62-dev),然后再运行pip,最好是在一个虚拟环境中。如果这样还不够,可能你的系统还有其他问题。可以查看这个帖子(ubuntuforums)来找到解决方法。

撰写回答