找到PIL / PILLOW正在使用的libjpeg

时间:2014-06-24 21:35:34

标签: python python-imaging-library libjpeg pillow

我收到一个错误,在两台不同的计算机上读取相同的lena.jpg文件会产生两个不同的校验和。

甚至更奇怪的是,当我运行md5sum lena.jpg时,我在两台机器上获得相同的md5总和,因此文件是相同的。

此外,当我加载png而不是jpeg时,数字似乎匹配。这让我相信Pillow在两台不同的机器上,或者至少是用于读取jpeg文件的库之间存在脱节。

有没有办法检查Pillow正在使用哪个版本的libjpeg(最好是在Python中)?

两台计算机都是Ubuntu,虽然一台是12.04,一台是14.04(我也在Mac上测试了它,并且得到了与14.04盒子相同的值)

2 个答案:

答案 0 :(得分:6)

首先,找到Python安装正在使用的PIL蛋:

>>> import PIL
>>> PIL.__path__
['/usr/local/python/2.7.3/lib/python2.7/site-packages/PIL']

然后在该目录中找到_imaging.so并使用ldd(Linux)或otool -L(OS X)查找已链接的libjpeg版本:

<强>的Linux

$ ldd /usr/local/python/2.7.3/lib/python2.7/site-packages/PIL/_imaging.so
    linux-gate.so.1 =>  (0x00641000)
    libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x00f00000)
    libz.so.1 => /lib/libz.so.1 (0x006f4000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00fad000)
    libc.so.6 => /lib/libc.so.6 (0x0021b000)
    /lib/ld-linux.so.2 (0x0067e000)

Mac OS X

$ otool -L /Users/lukas/src/pillow-env/lib/python2.7/site-packages/PIL/_imaging.so
/Users/lukas/src/pillow-env/lib/python2.7/site-packages/PIL/_imaging.so:
    /usr/local/lib/libjpeg.8.dylib (compatibility version 13.0.0, current version 13.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/local/lib/libtiff.5.dylib (compatibility version 8.0.0, current version 8.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

答案 1 :(得分:1)

试试这个:

ldd path/to/your/PIL/_*.so

如果您使用的是virtualenv,请尝试在您的VIRTUALENV_HOME上找到PIL,通常是在

~/.virtualenvs/$VIRTUAL_ENV/lib/python2.7/site-packages/PIL

如果您使用的是ubuntu软件包,请使用dpkg查找您的枕头/ PIL安装位置。