Django OS X错误的JPEG库版本:库是80,调用者期望62 sorl.thumbnail

时间:2011-10-24 14:38:45

标签: python-imaging-library libjpeg sorl-thumbnail

我在我的Mac上使用本地django的sorl.thumbnail并且一直遇到PIL问题,但今天我终于设法安装了它 - 与libjpeg有些麻烦。

我现在可以上传和使用图片 - 但是我无法使用sorl.thumbnail调整它们的大小。

当我尝试时,我收到以下错误:

Wrong JPEG library version: library is 80, caller expects 62

有没有人知道这个的好方法。

我不知道无论sorl使用什么,都需要更早版本的libjpeg,或者还有一些幽灵安装的东西仍然是我用各种方法尝试的。

我有:

  1. PIL 1.1.7
  2. libjpeg 8。
  3. 任何人都知道一种方法吗?

4 个答案:

答案 0 :(得分:7)

为了未来遇到此错误并且不知道原因的人们的利益,我想发布我的发现。我希望能够大致了解出现了什么问题,因为修复它的确切命令在您的计算机上可能与我的OSX Lion安装上的不同。

首先,由于很容易迷失在潜在的解决方案中,因此当它显示Wrong JPEG library version: library is 80, caller expects 626270的其他组合时,了解错误消息是正确的非常重要。和80。这些数字对应于libjpeg的不同不兼容版本。这里有两个移动部件,动态加载的jpeg库和PIL(或Pillow)安装。错误消息的含义是您的PIL安装是使用libjpeg 6.2版的头文件编译的,但当它加载实际的共享库时,它将被链接到8.0版。

修复是download,构建并安装你想要的libjpeg版本(任何人都会这样做,虽然后来的版本在OSX Lion上更容易构建):

 wget http://www.ijg.org/files/jpegsrc.v8d.tar.gz
 tar xzf jpegsrc*
 cd jpeg-*
 ./configure
 make
 sudo make install

这应该删除'/ usr / local /'中的2个注释文件。即/usr/local/lib/libjpeg.8.dylib/usr/local/include/jpeglib.h。现在我们只需要让PIL(或Pillow)在安装时使用这两个文件,我们就可以免费回家了。我知道有更好的方法可以做到这一点,但是黑客(根据PIL文档的建议)是在安装之前编辑PIL发行版的setup.py文件。您可以在JPEG_ROOT = libinclude('/usr/local')顶部附近设置setup.py,但在文件的其他位置可能需要进一步的目录操作。

当你摆弄路径时,你必须确保PIL在测试它是否链接到正确的库之前进行完全重建。我使用像rm -rf build && python setup.py install这样的命令来确保库始终与我正在测试的当前路径新链接。

我很抱歉这是一个漫无边际的答案,但是尝试过其他每一个副本都非常令人沮丧。粘贴解决方案,没有任何工作。希望这个答案至少让一些人浪费了很多时间来寻找简单的解决方案。

祝你好运!

答案 1 :(得分:0)

如果您安装了macport,则应该执行以下操作:

$ sudo port selfupdate
$ sudo port install py27-pil

它比easy_install方法更容易,因为macports安装了正确的依赖项。

答案 2 :(得分:0)

我的问题与OP略有不同,但我想在这里分享我的解决方案以帮助将来的人。

操作系统:OSX El Capitan 我从他们网站上的预编译二进制文件安装了libjpeg-turbo。但是,我不知道我已经在我的mac上安装了不同版本的libjpeg。我正在构建我的c文件gcc myfile.c -o myfile.out -L /opt/libjpeg-turbo/lib -ljpeg。这使得库从正确的位置获得,但链接器从预安装位置获取包含的头文件jpeglib.h。我将构建命令更改为:gcc myfile.c -o myfile.out -I/opt/libjpeg-turbo/include/ -L /opt/libjpeg-turbo/lib -ljpeg并且它有效。没有更多的图书馆是80,来电者期望62!

答案 3 :(得分:0)

与先前的回答一样,我的问题与OP稍有不同,但是我想在这里分享我的解决方案以帮助将来的某人。

对我唯一有效的方法是在安装所需库的 dev 版本后,迫使pip从源代码构建枕头(我的代码是编辑jpg并使用自定义字体添加标签) 。这是在使用Python 3.7.3运行Ubuntu Linux的基于ARM的嵌入式设备上进行的

apt-get install -y libjpeg-dev libfreetype6-dev
pip3 install pillow --global-option="build_ext" --global-option="--enable-jpeg" --global-option="--enable-freetype"