2012-07-27 49 views
6

我正在运行Django 1.4PIL 1.1.7virtualenvpip管理。每当我通过我的管理界面上传JPEG文件,我得到以下错误:Upload a valid image. The file you uploaded was either not an image or a corrupted image.让Django识别PIL JPEG支持

正如很多Ubuntu的用户报告,在安装时,PIL erronously看着/usr/lib/libjpeg,而其真正的位置是/usr/lib/i386-linux-gnu/。这被照顾了;我跟着这些职位的答案:

Django ImageField "Upload a valid image. The file you uploaded was either not an image or a corrupted image."

Why can't I upload jpg files to my Django app via admin/?

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


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 

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

编辑1:另外请注意,我已经尝试注销并且管理员重新登录,以及在这个岗位上安装pillow,如:Uploading a JPEG image via Django displays error

+0

您是否尝试安装[Pillow](http://pypi.python.org/pypi/Pillow)而不是PIL?检查你的sys.path – jterrace 2012-07-27 16:47:43

+0

你可以上传你的模型吗? – nicowernli 2012-07-27 16:53:52

+0

@jterrace:是的。并且该安装还告诉我可以使用JPEG支持。 – novembrine 2012-07-27 16:55:10

回答

2

事实证明,这件事是我的错,由于误解如何pip实际工作。按照习惯,我将任何和所有安装与超级用户权限相关联,这不仅在这种情况下不是必需的,而且是混淆的方法。

我第一次安装PIL,我没有sudo前缀,但我以后每次都做到了。因此,从Meitham的建议开始,我检查了进口的来源。它来自正确的位置,但它没有我想要的扩展名,尽管安装后的输出说我做了。长话短说,我从我的网站包中删除了目录,然后pip freeze继续告诉我,我没有PIL,但sudo pip install告诉我,我做到了。

获得的经验教训:virtualenv是基于用户的目录,对用户的权限。在将sudopip组合在相同的命令中之前考虑两次。