Skip to content

Pillow installed with jpeg still says "IOError: decoder jpeg not available" #1338

@certik

Description

@certik

Here is how it is triggered:

In [3]: from PIL import Image

In [5]: a = Image.open("images/spice_1.jpg")

In [7]: from io import BytesIO

In [9]: b = BytesIO()

In [10]: a.save(b, "PNG")
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-10-7850474bd2ff> in <module>()
----> 1 a.save(b, "PNG")

/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/Image.pyc in save(self, fp, format, **params)
   1669 
   1670         # may mutate self!
-> 1671         self.load()
   1672 
   1673         save_all = False

/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/ImageFile.pyc in load(self)
    201 
    202             for d, e, o, a in self.tile:
--> 203                 d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
    204                 seek(o)
    205                 try:

/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/Image.pyc in _getdecoder(mode, decoder_name, args, extra)
    418         return decoder(mode, *args + extra)
    419     except AttributeError:
--> 420         raise IOError("decoder %s not available" % decoder_name)
    421 
    422 

IOError: decoder jpeg not available

But pillow has been installed with jpeg support, as part of Hashdist, here is the PR hashdist/hashstack#806, here is the build script:

$ hit show d2.yaml script pillow
set -e
export HDIST_IN_BUILD=yes
export MAX_CONCURRENCY=1
export SETUPTOOLS_PACKAGE_EXTRA_OPTIONS="build_ext --enable-zlib --enable-freetype --enable-jpeg2000 --include-dirs=${ZLIB_DIR}/include:${PNG_DIR}/include:${FREETYPE_DIR}/include:${OPENJPEG_DIR}/include --library-dirs=${ZLIB_DIR}/lib:${PNG_DIR}/lib:${FREETYPE_DIR}/lib:${OPENJPEG_DIR}/lib"
export CPPFLAGS="-I${FREETYPE_DIR}/include -I${OPENJPEG_DIR}/include -I${PATCHELF_DIR}/include -I${PNG_DIR}/include -I${PYTHON_DIR}/include -I${SETUPTOOLS_DIR}/include -I${ZLIB_DIR}/include"
export LDFLAGS="-L${FREETYPE_DIR}/lib -Wl,-rpath=${FREETYPE_DIR}/lib -L${OPENJPEG_DIR}/lib -Wl,-rpath=${OPENJPEG_DIR}/lib -L${PATCHELF_DIR}/lib -Wl,-rpath=${PATCHELF_DIR}/lib -L${PNG_DIR}/lib -Wl,-rpath=${PNG_DIR}/lib -L${PYTHON_DIR}/lib -Wl,-rpath=${PYTHON_DIR}/lib -L${SETUPTOOLS_DIR}/lib -Wl,-rpath=${SETUPTOOLS_DIR}/lib -L${ZLIB_DIR}/lib -Wl,-rpath=${ZLIB_DIR}/lib"

export PYTHONPATH=${ARTIFACT}/lib/python2.7/site-packages:$PYTHONPATH
mkdir -p ${ARTIFACT}/lib/python2.7/site-packages
${PYTHON} -c 'import setuptools; __file__="setup.py"; exec(open(__file__).read())' \
   ${SETUPTOOLS_PACKAGE_EXTRA_OPTIONS} \
   install \
   --prefix=. --root=${ARTIFACT} \
   --single-version-externally-managed
rm -rf ${ARTIFACT}/lib/python2.7/site-packages/*.pth

You can see that the libraries are linked with jpeg support:

$ ldd /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/*.so
/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/_imagingft.so:
    linux-vdso.so.1 =>  (0x00007ffe11377000)
    libfreetype.so.6 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../freetype/yyxa7627ngek/lib/libfreetype.so.6 (0x00007f946f06c000)
    libpython2.7.so.1.0 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../python/7h32ksdqcejo/lib/libpython2.7.so.1.0 (0x00007f946ec63000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f946ea21000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f946e65c000)
    libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f946e435000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f946e230000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f946e02d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f946dd26000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f946f50f000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f946db0d000)
/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/_imagingmath.so:
    linux-vdso.so.1 =>  (0x00007fff49396000)
    libpython2.7.so.1.0 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../python/7h32ksdqcejo/lib/libpython2.7.so.1.0 (0x00007f8e24adb000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e24898000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e244d3000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e242ce000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f8e240ca000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8e23dc4000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8e250ec000)
/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/_imagingmorph.so:
    linux-vdso.so.1 =>  (0x00007fffcb7e1000)
    libpython2.7.so.1.0 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../python/7h32ksdqcejo/lib/libpython2.7.so.1.0 (0x00007f5d7bbfe000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5d7b9bb000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5d7b5f6000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5d7b3f1000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f5d7b1ed000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5d7aee7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5d7c20c000)
/home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/_imaging.so:
    linux-vdso.so.1 =>  (0x00007ffca87f3000)
    libopenjp2.so.7 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../openjpeg/6azwtldpgrmo/lib/libopenjp2.so.7 (0x00007f4f844ad000)
    libz.so.1 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../zlib/v6anirfvk2op/lib/libz.so.1 (0x00007f4f84292000)
    libpython2.7.so.1.0 => /home/ondrej/.hashdist/bld/profile/qiuivcebvrmc/lib/python2.7/site-packages/PIL/../../../../../../python/7h32ksdqcejo/lib/libpython2.7.so.1.0 (0x00007f4f83e8a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f83c48000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f83882000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f8357c000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f83376000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f4f83173000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4f84958000)

Here is the full build log: https://gist.github.com/certik/785890e6e72e2ac51669. The relevant part is perhaps:

2015/07/06 10:53:58 - INFO: [package:run_job] PIL SETUP SUMMARY
2015/07/06 10:53:58 - INFO: [package:run_job] --------------------------------------------------------------------
2015/07/06 10:53:58 - INFO: [package:run_job] version      Pillow 2.9.0
2015/07/06 10:53:58 - INFO: [package:run_job] platform     linux2 2.7.9 (default, May 16 2015, 09:32:20)
2015/07/06 10:53:58 - INFO: [package:run_job]              [GCC 4.8.2]
2015/07/06 10:53:58 - INFO: [package:run_job] --------------------------------------------------------------------
2015/07/06 10:53:58 - INFO: [package:run_job] *** TKINTER support not available
2015/07/06 10:53:58 - INFO: [package:run_job] *** JPEG support not available
2015/07/06 10:53:58 - INFO: [package:run_job] --- OPENJPEG (JPEG2000) support available (2.1)
2015/07/06 10:53:58 - INFO: [package:run_job] --- ZLIB (PNG/ZIP) support available
2015/07/06 10:53:58 - INFO: [package:run_job] *** LIBTIFF support not available
2015/07/06 10:53:58 - INFO: [package:run_job] --- FREETYPE2 support available
2015/07/06 10:53:58 - INFO: [package:run_job] *** LITTLECMS2 support not available
2015/07/06 10:53:58 - INFO: [package:run_job] *** WEBP support not available
2015/07/06 10:53:58 - INFO: [package:run_job] *** WEBPMUX support not available

So OPENJPEG is there. JPEG is not --- what does that mean? I thought OPENJPEG gives the JPEG support. Maybe that's the problem?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions