Skip to content
Browse files

Fixed #7727 -- Improved the checks for import failure when using PIL.…

… Under PyPy, you can import the PIL module, but when you try to use it, the underlying _imaging module will not be available. Thanks to Maciej Fijalkowski (fijal) for the report and suggested fix.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent bfcecbf commit 4016d5264ab049c33c845c5337ce2a3e50754268 @freakboy3742 freakboy3742 committed
1  AUTHORS
@@ -150,6 +150,7 @@ answer newbie questions, and generally made Django that much better:
Stefane Fermgier <>
Afonso Fernández Nogueira <>
J. Pablo Fernandez <>
+ Maciej Fijalkowski
Matthew Flanagan <>
Eric Floehr <>
Vincent Foley <>
5 django/forms/
@@ -503,6 +503,11 @@ def clean(self, data, initial=None):
# but it must be called immediately after the constructor
trial_image =
+ except ImportError:
+ # Under PyPy, it is possible to import PIL. However, the underlying
+ # _imaging C module isn't available, so an ImportError will be
+ # raised. Catch and re-raise.
+ raise
except Exception: # Python Imaging Library doesn't recognize it as an image
raise ValidationError(self.error_messages['invalid_image'])
if hasattr(f, 'seek') and callable(
6 tests/modeltests/model_forms/
@@ -69,8 +69,10 @@ class ImageFile(models.Model):
description = models.CharField(max_length=20)
# If PIL is available, try testing PIL.
- # Otherwise, it's equivalent to TextFile above.
- import Image
+ # Checking for the existence of Image is enough for CPython, but
+ # for PyPy, you need to check for the underlying modules
+ # If PIL is not available, this test is equivalent to TextFile above.
+ import Image, _imaging
image = models.ImageField(upload_to=tempfile.gettempdir())
except ImportError:
image = models.FileField(upload_to=tempfile.gettempdir())

0 comments on commit 4016d52

Please sign in to comment.
Something went wrong with that request. Please try again.