查找PIL/PILLOW使用的libjpeg版本
我在两个不同的电脑上读取同一个lena.jpg文件时,发现它们的校验和(checksum)不一样,这让我很困惑。
更奇怪的是,当我在两个机器上运行md5sum lena.jpg时,得到的md5值是一样的,这说明这两个文件其实是完全相同的。
而且,当我用png格式的图片代替jpeg时,校验和又能对上。这让我觉得,可能是两个电脑上用的Pillow库之间有些不一致,或者说它们用来读取jpeg文件的库有问题。
有没有办法检查一下Pillow使用的是哪个版本的libjpeg?最好是在Python里面能查到。
这两台电脑都是Ubuntu系统,不过一台是12.04版本,另一台是14.04版本(我还在一台Mac上测试过,结果和14.04的电脑一样)。
2 个回答
1
试试这个:
ldd path/to/your/PIL/_*.so
如果你在用虚拟环境(virtualenv),可以去你的虚拟环境目录下找PIL,通常它会在这里:
~/.virtualenvs/$VIRTUAL_ENV/lib/python2.7/site-packages/PIL
如果你是在用Ubuntu的包管理工具,可以用dpkg命令来查找你安装的pillow/PIL的位置。
8
首先,找到你安装的Python正在使用的PIL包的位置:
>>> import PIL
>>> PIL.__path__
['/usr/local/python/2.7.3/lib/python2.7/site-packages/PIL']
然后在那个目录里找到 _imaging.so
文件,接着使用 ldd
(在Linux上)或者 otool -L
(在Mac 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)