pip安装PIL -E TICKETS-1 - 无JPEG/PNG支持

29 投票
3 回答
17561 浏览
提问于 2025-04-17 03:38

我在使用Ubuntu和VirtualEnv来做我的Django项目。

我通过Synaptic包管理器安装了PIL库,运行得很好。但是当我创建一个VirtualEnv并尝试用pip安装PIL时,虽然安装成功了,但却出现了一些奇怪的情况:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
              [GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

我本来希望可以用requirements.txt来管理我所有的依赖库,但可能PIL需要手动安装……那该怎么做呢?

编辑:谢谢你,John Keyes,你说得对,我运行了:

sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/

然后在再次尝试安装PIL后,我得到了:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
              [GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
-    -------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

编辑:你可能需要安装 libfreetype6-dev libjpeg8-dev

编辑:另一个不错的选择是用 Pillow 替代 PIL

3 个回答

5

我们找到的一个解决办法(截至PIL 1.7.7版本)是先卸载PIL,然后再卸载Pillow,接着用命令pip安装最新版本的Pillow。记得你需要先安装libjpeg8-dev这个库。

6

如果你在使用虚拟环境(virtualenv),那么你就不需要在系统范围内创建符号链接。这里有一个通用的方法,适用于任何架构:

ln -s /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/libz.so $VIRTUAL_ENV/lib/
ln -s /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/libfreetype.so $VIRTUAL_ENV/lib/
ln -s /usr/lib/`dpkg-architecture -qDEB_HOST_MULTIARCH`/libjpeg.so $VIRTUAL_ENV/lib/

你需要在虚拟环境被激活的命令行中执行这些命令,这样符号链接就会在你的虚拟环境的 lib 目录下创建。

命令 dpkg-architecture -qDEB_HOST_MULTIARCH 是用来检测主系统库的目录的(uname -i 这个命令不太可靠)。而环境变量 $VIRTUAL_ENV 是由虚拟环境的 activate 脚本设置的。

9

这个在Ubuntu论坛上的帖子讨论了这个话题。

撰写回答