2012-02-10 122 views
10

我在互聯網上看到了這個問題,我嘗試了全部跟蹤,但仍然無法讓PIL工作。如何在Ubuntu 11.04中安裝PIL?

我試圖象徵性地連接zlib的,JPEG等庫通過:

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/ 

我試圖編輯setup.py文件,加入這一行:

add_directory(library_dirs, "/usr/lib/x86_64-linux-gnu") 

事實上,運行$ sudo python setup.py install顯示, JPEG,ZLIB/PNG等支持可用。 (我安裝它的兩個2.5和2.7,工作在既不)

sudo python2.5 setup.py install 
running install 
running build 
running build_py 
running build_ext 
-------------------------------------------------------------------- 
PIL 1.1.7 SETUP SUMMARY 
-------------------------------------------------------------------- 
version  1.1.7 
platform  linux2 2.5.6 (r256:88840, Feb 1 2012, 15:55:08) 
       [GCC 4.5.2] 
-------------------------------------------------------------------- 
*** TKINTER support not available 
--- JPEG support available 
--- ZLIB (PNG/ZIP) support available 
--- FREETYPE2 support available 
--- LITTLECMS support available 

但畢竟,我還是得到一個decoder %s not available錯誤。

我在我的智慧結束。還有什麼我可能錯過了?

我的環境: 在VirtualBox虛擬機中運行的64位Ubuntu 11.04

這就是我做的測試,如果PIL工程或不

$ python 
>>> from PIL import Image 
>>> im = Image.open("photo.jpg") 
>>> im.rotate(45) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1359, in rotate 
    self.load() 
File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load 
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig) 
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder 
    raise IOError("decoder %s not available" % decoder_name) 
IOError: decoder zip not available 
>>> 
+0

爲什麼不使用包管理器安裝python-imaging? – mkriheli 2012-02-10 09:32:43

+0

沒有跨過我的腦海。另外,我不知道包名。 – john2x 2012-02-10 10:04:38

回答

12

像往常一樣,使用軟件包管理器:

sudo apt-get install python-imaging 

它會處理這一切爲您服務。 packages可用。

在任何Linux發行版中手動安裝都是浪費功夫,除非軟件包真的不存在。程序包維護人員花時間確保程序包正常工作和安裝,沒有意義重複他們的努力。尤其是不要手動安裝的東西,那麼沒有一個包的優勢 - 沒有自動更新,無需拆卸方便,等...

+0

剛剛嘗試過,但仍然收到解碼器錯誤。莫名其妙地弄亂了它嗎?我已經刪除了'site-packages/PIL'文件。另外,如何安裝它* * 2.5和2.7? (對於Google App Engine 2.5) – john2x 2012-02-10 10:03:21

+0

你什麼時候收到這個錯誤?這聽起來不像是一個導入錯誤 - 如果不是,你的問題不是安裝,而是在PIL或它的依賴關係中。這可能是該軟件包的一個錯誤,如果是這樣 - 你應該提交一個錯誤報告。至於2.5,我不確定Ubuntu如何處理舊版本的軟件,所以恐怕我無法爲你回答這個問題。 – 2012-02-10 10:10:01

+0

我更新了原文,看看我如何測試它是否正常工作。基本上,我打開一個圖像,並旋轉它。旋轉它使用解碼器,這就是我得到錯誤的地方。 – john2x 2012-02-10 10:15:49

1

嘗試從頭開始重新安裝:

  1. 查找LIB/pythonXX /站點包/ PIL。刪除所有此目錄以及文件PIL.pth。這應該完全刪除te包。

  2. 從您下載的* tar.gz中解壓縮PIL安裝文件。

  3. 像以前一樣,使用add_directory(...)添加jpeg庫所在的目錄。 (使用ldconfig -P | grep jpeg查找庫的位置)。

  4. 重試python setup.py build,然後python setup.py install。測試它。

我的經驗是:

不執行步驟2中並沒有重新包裝。 不執行步驟3是根本原因。 不執行步驟1可能起了一部分作用。

這似乎是PIL安裝中的一個錯誤,而不是Ubuntu或任何發行版的包結構。

只是爲了記錄:在系統上安裝多個Python版本是很常見的,這使得需要手動安裝軟件包。有些人有2.x用於實驗,共享主機有2.5s,應用程序需要2.7,僅舉兩個例子。

2

我已經成功地重新安裝PIL在Ubuntu 12.04是這樣的:

pip uninstall PIL 
apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev 
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/ 
ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/ 
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/ 
pip install -U PIL 

它不重新安裝PIL後提高IOError: decoder zip not available了。我的錯誤追溯是:

Traceback (most recent call last): 
    File "convert_image.py", line 15, in <module> 
    image.save('output.png') 
    File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1406, in save 
    self.load() 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load 
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder 
    raise IOError("decoder %s not available" % decoder_name) 
IOError: decoder zip not available 
0

我發現它是在Ubuntu上安裝帶有requirements.txt的上述兩者的組合。我使用的是流浪運行廚師腳本,發現這種方法最適合我:

首先,我使用bash腳本設置PIL:

#!/usr/bin/env bash 

sudo apt-get build-dep python-imaging 
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ 
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ 
sudo ln -s -f /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/ 

接下來,requirements.txt期間安裝,該文件的頂部看起來像:

--allow-external PIL 
--allow-unverified PIL 

Django==1.5.4 
PIL==1.1.7 
... 

當然,這是做的一個不安全的方式,但適用於開發和快速建立。對於生產,最好手動下載和驗證所有軟件包,並從本地託管存儲庫安裝它們。