让Django识别PIL JPEG支持

nov*_*ine 6 python django virtualenv libjpeg python-imaging-library

我正在运行Django 1.4并且PIL 1.1.7在virtualenv管理中pip.每当我通过管理界面上传JPEG文件时,都会收到以下错误:Upload a valid image. The file you uploaded was either not an image or a corrupted image.

由于很多Ubuntu的用户报告,在安装时,PIL erronously看着/usr/lib/了libjpeg,而其真正的位置是/usr/lib/i386-linux-gnu/.这是照顾; 我按照这些帖子中的答案:

Django ImageField"上传有效图像.您上传的文件不是图像或损坏的图像."

为什么我不能通过admin /?将jpg文件上传到我的Django应用程序?

现在安装的最终输出如下:


PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.3 (default, Apr 20 2012, 22:44:07)
              [GCC 4.6.3]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

To check the build, run the selftest.py script.
changing mode of build/scripts-2.7/pilfile.py from 644 to 755
changing mode of build/scripts-2.7/pilfont.py from 644 to 755
changing mode of build/scripts-2.7/pilconvert.py from 644 to 755
changing mode of build/scripts-2.7/pilprint.py from 644 to 755
changing mode of build/scripts-2.7/pildriver.py from 644 to 755

changing mode of /usr/local/bin/pilfile.py to 755
changing mode of /usr/local/bin/pilfont.py to 755
changing mode of /usr/local/bin/pilconvert.py to 755
changing mode of /usr/local/bin/pilprint.py to 755
changing mode of /usr/local/bin/pildriver.py to 755
Successfully installed PIL
Run Code Online (Sandbox Code Playgroud)

但是,Django 仍然不允许我上传除BMP文件以外的任何内容,这对于这个项目是不可接受的.与第二个链接中的用户不同,我不使用Apache,所以我的问题可能与此无关.我怀疑Django仍在使用旧的PIL安装.问题是我不知道从哪里得到它.这些文件~/.virtualenvs/project/local/lib/python2.7/site-packages对我来说似乎是最新的.有任何想法吗?

编辑1:还要注意我已经尝试注销并重新登录管理员,以及安装pillow,如在这篇文章中:通过Django上传JPEG图像显示错误

nov*_*ine 2

事实证明,这整件事都是我的错,因为我对pip实际运作方式的误解。根据习惯,我将所有安装与超级用户权限相关联,这在本例中不仅没有必要,而且会造成混乱。

我第一次安装时PIL,没有添加前缀sudo,但之后每次安装时都会添加前缀。因此,根据梅瑟姆的建议,我检查了进口的来源。它来自正确的位置,但它没有我想要的扩展,尽管安装后输出说我有。长话短说,我从我的站点包中删除了该目录,然后pip freeze继续告诉我我没有PIL,但sudo pip install告诉我我有。

经验教训:virtualenv是基于用户的目录,基于用户的权限。sudo在组合和pip使用同一个命令之前请三思。