我在我的Mac上使用本地django的sorl.thumbnail并且一直遇到PIL问题,但今天我终于设法安装了它 - 与libjpeg有些麻烦。
我现在可以上传和使用图片 - 但是我无法使用sorl.thumbnail调整它们的大小。
当我尝试时,我收到以下错误:
Wrong JPEG library version: library is 80, caller expects 62
有没有人知道这个的好方法。
我不知道无论sorl使用什么,都需要更早版本的libjpeg,或者还有一些幽灵安装的东西仍然是我用各种方法尝试的。
我有:
任何人都知道一种方法吗?
答案 0 :(得分:7)
为了未来遇到此错误并且不知道原因的人们的利益,我想发布我的发现。我希望能够大致了解出现了什么问题,因为修复它的确切命令在您的计算机上可能与我的OSX Lion安装上的不同。
首先,由于很容易迷失在潜在的解决方案中,因此当它显示Wrong JPEG library version: library is 80, caller expects 62
或62
,70
的其他组合时,了解错误消息是正确的非常重要。和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"