python中PIL安装简单教程


Posted in Python onApril 21, 2016

python 的PIL安装是一件很头疼的的事, 如果你要在python 中使用图型程序那怕只是将个图片从二进制流中存盘(例如使用Scrapy 爬网存图),那么都会使用到 PIL
这库,而这个库是出名的难安装.

它的表现为,如果你使用 Scrapy 的ImagePipeline 它就会默认使用PIL,如果没有正确安装图型解码器那会都会出现以下的错误:

IOError: decoder jpeg not available
在网上找过很多方法都还是不行,也不明究竟,开始以为是 PIL 这个库的安装有问题,但即使正确安装了PIL仍然是会出现 以上的错误.原因就在于解码器 decoder 的问题.

后来找到一个叫 Imaging-1.1.7 的包,胡乱地安装了一下,结果行了就没有理会. 技术债是始终要还的, 只是没想到这么快, 临近项目发布又在 Ubuntu 上遇到同的样问题了,
直接用这个包,但结果却...

答案当然是让人痛苦的, 还是 IOError ~

好吧,痛苦的事就让它过去吧, 经过一番的折腾后最后发现一线曙光, 请留意以下的表信息:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version    1.1.7
platform   linux2 2.7.6 (default, Jun 22 2015, 17:58:13)
       [GCC 4.8.2]
--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------

注: 这个表是在 Imaging 的安装目录中 用 python setup.py build 指令后显示出来.

如果你看得详细一点就发现了吧, 对! 所有的图片解码都不支持. 问题不是出在PIL上,而是在 decoder上. 我之前在 OSX上能牛屎地安装成功一定是之前安装了这些 decoder.

为了让其它的朋友不会再掉入此坑, 特意将安装方法整理了一下:

Mac OSX
brew update
brew install libjpeg libpng
装这两个就够了

Ubuntu 14.0.4
sudo apt-get install libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev
Linux 上比较惨一些,要多装几个包.

这还不够的, 最好就直接用 Pillow 这个 python 包来取代手工下载 Imaging 这个包吧,直接用以下指令

pip install -I --no-cache-dir -v Pillow
这个指令执行完毕会有一大堆的信息,不用管它,只要找到以下这个就行了:

--------------------------------------------------------------------
PIL SETUP SUMMARY
--------------------------------------------------------------------
version   Pillow 3.2.0
platform   linux2 2.7.6 (default, Jun 22 2015, 17:58:13)
       [GCC 4.8.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
*** OPENJPEG (JPEG2000) support not available
--- ZLIB (PNG/ZIP) support available
*** LIBTIFF support not available
--- FREETYPE2 support available
*** LITTLECMS2 support not available
*** WEBP support not available
*** WEBPMUX 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.

To check the build, run the selftest.py script.

这下行了! 还有一个小提示: 请留意看上面一行, To check the build, run the selftest.py script. 这个selftest.py 可是个好东东噢.至少可以知道成功没。

祝大家安装成功!

Python 相关文章推荐
Python发送Email方法实例
Aug 21 Python
Python 26进制计算实现方法
May 28 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python 函数list&read&seek详解
Aug 28 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
pandas进行数据输入和输出的方法详解
Mar 23 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 #Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 #Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 #Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 #Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 #Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 #Python
详解Python命令行解析工具Argparse
Apr 20 #Python
You might like
浅析php中jsonp的跨域实例
2013/06/21 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
centos6.4下python3.6.1安装教程
2017/07/21 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
PyCharm代码格式调整方法
2018/05/23 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
泰国第一在线超市:Tops
2021/02/13 全球购物
决定成败的关键——创业计划书
2014/01/24 职场文书
网络教育自我鉴定
2014/02/04 职场文书
岗位职责怎么写
2014/03/14 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
2014年法院工作总结
2014/11/24 职场文书
公务员年度个人总结
2015/02/12 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
Docker官方工具docker-registry案例演示
2022/04/13 Servers