3

Im using sorl.thumbnail for django locally on my mac and have been having trouble with PIL, but today i finally managed to get it installed - was some trouble with libjpeg.

I can now upload and use images - but I cant resize them using sorl.thumbnail.

When i try i get the following error:

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

Does anyone know a good solution for this.

I dont know wether whatever sorl uses requires an earlier version of libjpeg or wether there is some ghost install of something still left behind from all of my tries with various methods.

I have :

  1. PIL 1.1.7
  2. libjpeg 8.

anyone know an approach?

4

4 回答 4

7

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

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

修复方法是下载、构建和安装您想要的 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 文档所推荐的)是setup.py在安装之前编辑 PIL 分发的文件。您可能只需JPEG_ROOT = libinclude('/usr/local')在 顶部附近进行设置即可setup.py,尽管在文件的其他位置可能需要进一步的目录操作。

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

很抱歉,这是一个漫不经心的答案,但是尝试了所有其他复制和粘贴解决方案却没有一个工作是非常令人沮丧的。希望这个答案至少可以避免一些人浪费大量时间来寻找简单的解决方案。

祝你好运!

于 2012-05-10T04:56:05.990 回答
0

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

$ sudo port selfupdate
$ sudo port install py27-pil

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

于 2012-01-31T17:01:17.987 回答
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!

于 2016-08-24T13:44:33.460 回答
0

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

唯一对我有用的是在安装所需库的开发版本后强制 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" 
于 2019-06-22T16:02:33.020 回答