diff --git a/PIL/Image.py b/PIL/Image.py index a0ba25b8c..be7fbb500 100644 --- a/PIL/Image.py +++ b/PIL/Image.py @@ -123,6 +123,16 @@ try: except ImportError: HAS_CFFI = False +try: + from pathlib import Path + HAS_PATHLIB = True +except ImportError: + try: + from pathlib2 import Path + HAS_PATHLIB = True + except ImportError: + HAS_PATHLIB = False + def isImageType(t): """ @@ -1875,11 +1885,9 @@ class Image(object): if isPath(fp): filename = fp open_fp = True - elif sys.version_info >= (3, 4): - from pathlib import Path - if isinstance(fp, Path): - filename = str(fp) - open_fp = True + elif HAS_PATHLIB and isinstance(fp, Path): + filename = str(fp) + open_fp = True if not filename and hasattr(fp, "name") and isPath(fp.name): # only set the name for metadata purposes filename = fp.name @@ -2516,13 +2524,8 @@ def open(fp, mode="r"): filename = "" if isPath(fp): filename = fp - else: - try: - from pathlib import Path - if isinstance(fp, Path): - filename = str(fp.resolve()) - except ImportError: - pass + elif HAS_PATHLIB and isinstance(fp, Path): + filename = str(fp.resolve()) if filename: fp = builtins.open(filename, "rb") diff --git a/Tests/test_image.py b/Tests/test_image.py index 0c104f0aa..e65e0e4c7 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -2,7 +2,6 @@ from helper import unittest, PillowTestCase, hopper from PIL import Image import os -import sys class TestImage(PillowTestCase): @@ -72,10 +71,9 @@ class TestImage(PillowTestCase): def test_bad_mode(self): self.assertRaises(ValueError, Image.open, "filename", "bad mode") - @unittest.skipIf(sys.version_info < (3, 4), - "pathlib only available in Python 3.4 or later") + @unittest.skipUnless(Image.HAS_PATHLIB, "requires pathlib/pathlib2") def test_pathlib(self): - from pathlib import Path + from PIL.Image import Path im = Image.open(Path("Tests/images/hopper.jpg")) self.assertEqual(im.mode, "RGB") self.assertEqual(im.size, (128, 128))