以下來說說安裝PIL的艱難過程,中途遇到一些問題,雖然網上很多類似的問題解答,可都是一樣的只告訴很簡單的“如何處理”一下就可以了,但是我就是完成不了這一步。
先介紹一下最終完成時我的環境,windows 7 64位系統、python 2.7.9 32位和Pillow-2.7.0.win32-py2.7。
首先,菜鳥學習PIL,直接按照廖雪峰老師的python教程上寫的方法安裝PIL(“ Windows平台就去 PIL官方網站 下載exe安裝包” )
然後,按照他的模板寫了個非常簡單的產生驗證碼圖片的小程式,一系列問題接踵而至。
1. 出現ImportError錯誤“ The _imagingft C module is not installed ” 具體出錯的那行代碼是font = ImageFont.truetype('Arial.ttf', 36),把這行注釋之後,可以正確運行,只是圖片上的驗證碼字母是預設字型和大小,根本看不見。
大家的建議都是 PIL官方編譯包有bug,最好下載 第三方組織編譯包,強烈推薦pillow ,然後我在一個著名的非官方網站( http://www.lfd.uci.edu/~gohlke/pythonlibs/ )上下載了pillow。 該網站提供的windows可用的下載只有一項: Pillow-2.7.0-cp26-none-win32.whl
Pillow-2.7.0-cp26-none-win_amd64.whl
Pillow-2.7.0-cp27-none-win32.whl
Pillow-2.7.0-cp27-none-win_amd64.whl
Pillow-2.7.0-cp32-none-win32.whl
Pillow-2.7.0-cp32-none-win_amd64.whl
Pillow-2.7.0-cp33-none-win32.whl
Pillow-2.7.0-cp33-none-win_amd64.whl
Pillow-2.7.0-cp34-none-win32.whl
Pillow-2.7.0-cp34-none-win_amd64.whl
Pillow-2.7.0.win32-pypy2.4-py2.7.zip
2. 下載的壓縮包中有兩個檔案夾bin和site-packages,問題又來了,對於一個小白來說,這該如何安裝是好呢。 site-packages檔案夾下面還有PIL和Pillow-2.7.0-py2.7.egg-info,這應該是採用exe安裝後出現在Python27/Lib/site-packages檔案夾下的第三方庫檔案。 反正python是綠色的,於是乎,直接把這兩個檔案夾拷貝到該目錄下。
沒有之前的那個錯誤了,可還是有錯“ImportError: cannot import name _imaging”。
於是,我猜測,是不是跟 bin目錄下的東西有關呢。該目錄下的五個.py檔案(pilconvert.py, pildriver.py, pilfile.py, pilfont.py, pilprint.py )需要放在哪裡呢。
3. 然後查看pillow的文檔中關於它的安裝問題,文檔給出的windows的兩種安裝方式如下:
Windows installation
We provide binaries for Windows in the form of Python Eggs and Python Wheels:
Python Eggs
pip does not support Python Eggs; use easy_install instead.
$ easy_install Pillow
Python Wheels
Experimental. Requires setuptools >=0.8 and pip >=1.4.1
$ pip install --use-wheel Pillow
If the above does not work, it’s likely because we haven’t uploaded a wheel for the latest version of Pillow. In that case, try pinning it to a specific version:
$ pip install --use-wheel Pillow==2.6.1
我採用easy_install的方式安裝,結果卻安裝到了theano(當初搗騰deep learning時安裝的,沒跑通還把python和註冊表改得稀爛)目錄下了,原來我的電腦裡裝分別裝了32和64位的python2.7.4版本,並且環境變數裡的python目錄修改到theano下了。 一時太混亂,所以我選擇直接把所有的python及第三方庫全部卸載,然後重新安裝完python後,還需要安裝easy_install,不然的話執行上面的命令提示不是內部命令。
4. 最後,我懶得安裝easy_install,終於找到了pillow的exe版本 ( https://pypi.python.org/pypi/Pillow/2.7.0),直接雙擊安裝非常方便。 安裝它之後一定要注意的是import Image一定要換成
from PIL import Image 還有一項需要注意的是,如果你先安裝了官方的PIL的話,需要
先卸載PIL再安裝pillow,並且要保證卸載的時候把site-packages中的PIL檔案刪掉了,不然的話安裝pillow裡的PIL會與之前已經存在的PIL合并,導致一些意想不到的錯誤。
總結一下需要注意的問題: (1)確定python的版本和自己要安裝的第三方庫的版本及其支援的python版本是否一致,這裡的一致除了版本號碼一致外,還要看是32位還是64位,有時候32位的第三方庫也不能安裝到64位的python上。 (2)官方的PIL有一些bug,可以採用pillow替換。若先安裝了官方的PIL,安裝pillow前需要先卸載PIL。 (3)安裝pillow,採用easy_install或者pip安裝的時候一定要注意安裝的目錄是不是我們正在用的這個python。(一般人應該不會像我這麼傻地裝這麼多版本的python吧,反正我的電腦裡三個windows,每個系統下都有python,有個系統裡還有好幾個python) (4)安裝pillow,強烈建議到 https://pypi.python.org/pypi/Pillow/2.7.0 下載合適的pillow版本的exe進行安裝。 (5)寫python指令碼應用Image的時候, import Image一定要換成 from PIL import Image
好不容易安裝好環境,跟著廖老師學python,第一個小小的驗證碼產生程式:
#!/usr/bin/env python# -*- coding: utf-8 -*-from PIL import Image, ImageDraw, ImageFont, ImageFilterimport random# random characterdef rndChar(): return chr(random.randint(65, 90))# random color 1def rndColor(): return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# random color 2def rndColor2(): return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))# 240 * 60width = 60 * 4height = 60image = Image.new('RGB', (width, height), (255, 255, 255))# create Font objectfont = ImageFont.truetype('Arial.ttf', 36)# create Draw objectdraw = ImageDraw.Draw(image)# fill in every pixelfor x in range(width): for y in range(height): draw.point((x, y), fill = rndColor())# output the textfor t in range(4): draw.text((60 * t + 10, 10), rndChar(), font = font, fill = rndColor2())# fuzzyimage = image.filter(ImageFilter.BLUR)image.save('code.jpg','jpeg')
參考: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140767171357714f87a053a824ffd811d98a83b58ec13000 http://www.lfd.uci.edu/~gohlke/pythonlibs/ https://pypi.python.org/pypi/Pillow/2.7.0 http://pillow.readthedocs.org/en/latest/installation.html