Thư viện hình ảnh Python không thành công với thông báo Bộ giải mã hình ảnh JPEG không có sẵn


305

PIL không hỗ trợ JPEG trong hệ thống của tôi.

Bất cứ khi nào tôi thực hiện tải lên, mã của tôi đều thất bại với:

File "PIL/Image.py", line 375, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available

Làm thế nào tôi có thể giải quyết điều này?


22
Đó là một câu hỏi hợp lệ. PIL là một Thư viện Python nổi tiếng và nó đưa ra một lỗi lạ trong một số hệ thống linux. Câu hỏi này và câu trả lời chỉ giúp tôi. Đó là một câu hỏi SO điển hình.
Neves

PRAGMATIST và OCD trong tôi nói rằng nó thuộc về ServerFault, không phải trên SO. Nhưng có bao nhiêu lập trình viên đã gặp phải vấn đề này? Tôi bỏ phiếu để chuyển câu hỏi sang ServerFault và để lại một chuyển hướng tại chỗ trên SO.
FlipMcF

1
Có lẽ bạn có thể đọc nó và thử nó: stackoverflow.com/questions/18504835/ Kẻ
Cuối tuần

1
@dkt Tôi đang sử dụng gối và ở đây vì tôi vừa gặp phải vấn đề này.
Stephen Tetreault

1
@dkt Tôi biết, tôi chỉ nói rằng vấn đề vẫn còn tồn tại.
Stephen Tetreault

Câu trả lời:


488

libjpeg-dev được yêu cầu để có thể xử lý jpeg bằng gối (hoặc PIL), vì vậy bạn cần cài đặt nó và sau đó biên dịch lại gối. Dường như libjpeg8-dev là cần thiết trên Ubuntu 14.04

Nếu bạn vẫn đang sử dụng PIL thì bạn thực sự nên sử dụng gối trong những ngày này, vì vậy pip uninstall PILtrước tiên hãy làm theo các hướng dẫn này để chuyển đổi hoặc nếu bạn có lý do chính đáng để gắn bó với PIL thì hãy thay thế "gối" bằng "PIL" ở bên dưới ).

Trên Ubuntu:

# install libjpeg-dev with apt
sudo apt-get install libjpeg-dev
# if you're on Ubuntu 14.04, also install this
sudo apt-get install libjpeg8-dev

# reinstall pillow
pip install --no-cache-dir -I pillow

Nếu điều đó không hiệu quả, hãy thử một trong những cách dưới đây, tùy thuộc vào việc bạn đang sử dụng Ubuntu 64 bit hay 32 bit.

Đối với Ubuntu x64:

sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
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

Hoặc cho Ubuntu 32 bit:

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

Sau đó cài đặt lại gối:

pip install --no-cache-dir -I pillow

(Chỉnh sửa để bao gồm phản hồi từ các bình luận. Cảm ơn Charles Offenbacher vì đã chỉ ra điều này khác với 32 bit và t-mart vì đã đề xuất sử dụng --no-cache-dir).


1
Vấn đề là tôi đã có hai gói python. Một cái được gửi cùng với Ubuntu và một cái khác thuộc về Zope Server. Bằng cách nào đó, thư viện bị hỏng vì tôi đã cài đặt sai trong gói sai. Nếu không, không có vấn đề.
Ravi

2
Đối với bản ghi, chỉ hoạt động trên x86_64, tôi đã phải chạy: sudo ln -s /usr/lib/i386-linux-gnu/libz.so / usr / lib /; sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 / usr / lib /; sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so / usr / lib /
Charles Offenbacher

2
Đối với bất cứ ai mới bắt đầu với PIL nên lưu ý rằng nó đã lỗi thời và không thực sự được duy trì nữa. Nếu bạn muốn làm việc với hình ảnh trong dự án của mình, hãy sử dụng PILLOW được cập nhật và duy trì ngã ba hoặc PIL.
Dhiraj Thakur

1
@Rolo sau 3 giờ, tùy chọn thứ hai của bạn đã có hiệu quả với tôi, cảm ơn rất nhiều, cái gối thật ngu ngốc
Akshay Mukadam

5
Các phiên bản gần đây của pip phải lưu trữ các gói đã tải xuống và các phần tổng hợp của chúng. Chắc chắn, pip installlần đầu tiên nó rất dài đối với mọi thứ, nhưng sau đó các lần gỡ cài đặt và (cài đặt lại) sau đó đã nhanh chóng đáng ngờ. Dù sao , các phương pháp trên không hiệu quả với tôi cho đến khi tôi chạy pip install --no-cache-dir pillow. Chúc may mắn!
t-mart

63

Đối với những người dùng OSX, tôi đã sử dụng nhị phân sau để cài đặt libpng và libjpeg trên toàn hệ thống:

libpng & libjpeg cho OSX

Vì tôi đã cài đặt PIL (thông qua pip trên virtualenv), tôi đã chạy:

pip uninstall PIL
pip install PIL --upgrade

Điều này đã giải quyết decoder JPEG not availablelỗi cho tôi.

CẬP NHẬT (24/4/14) :

Các phiên bản mới hơn của pip yêu cầu các cờ bổ sung để tải xuống các thư viện (bao gồm cả PIL) từ các nguồn bên ngoài. Hãy thử như sau:

pip install PIL --allow-external PIL --allow-unverified PIL

Xem câu trả lời sau để biết thêm thông tin: cài đặt pip PIL không cài đặt vào virtualenv

CẬP NHẬT 2 :

Nếu trên OSX Mavericks, bạn sẽ muốn đặt ARCHFLAGScờ làm bình luận @RicardoGonzales bên dưới :

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL

Tôi gặp vấn đề này sau khi nâng cấp lên Mavericks (10.9). Bài viết SO sau đây đã giải quyết vấn đề cho tôi. Cuộn xuống phần cài đặt công cụ dòng lệnh nhận xét bởi @Formulka
tatlar

Nếu bạn đang dùng Ubuntu 12.04 64 bit, hãy thử giải pháp của zeantsoi, tôi biết anh ấy đã làm nó cho OSX nhưng tôi đã thử nó và nó hiệu quả với tôi.
bế tắc

Tôi đã gặp lỗi này: Không thể tìm thấy bất kỳ donwnloads nào đáp ứng yêu cầu pil
RicardoGonzales

@RicardoGonzales, có lẽ bạn đang chạy trên một phiên bản pip yêu cầu bạn phải vượt qua các cờ bổ sung. Xin vui lòng xem cập nhật cho câu trả lời của tôi.
zeantsoi

@zeantsoi hiện đang tải xuống gói và cài đặt nhưng sau thông báo "Dọn dẹp". Tôi đã gặp lỗi liên quan đến: "-c nhập setuptools, tokenize; __ file ... ..." có lời khuyên nào không?
RicardoGonzales

29

Đây là cách duy nhất làm việc cho tôi. Cài đặt gói và cài đặt lại PIL không hoạt động.

Trên Ubuntu, cài đặt gói yêu cầu:

sudo apt-get install libjpeg-dev

(bạn cũng có thể muốn cài đặt libfreetype6 libfreetype6-dev zlib1g-devđể kích hoạt các bộ giải mã khác).

Sau đó thay PIL bằng gối:

pip uninstall PIL
pip install pillow

Tôi đã làm điều này một thời gian trước đây, và đột nhiên lỗi xuất hiện trở lại ngày hôm nay. Nâng cấp gối đã khắc phục sự cố : pip install pillow --upgrade.
Dennis Golomazov

21

Các công việc tiếp theo trên Ubuntu 12.04:

pip uninstall PIL
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
pip install PIL --upgrade

khi bạn thấy "- JPEG hỗ trợ sẵn có" có nghĩa là nó hoạt động.

Nhưng, nếu nó vẫn không hoạt động khi bạn chỉnh sửa hình ảnh jpeg của mình, hãy kiểm tra đường dẫn python !! đường dẫn python của tôi bị mất /usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/, vì vậy tôi chỉnh sửa ~/.bashrcthêm đoạn mã sau vào tệp này:

Biên tập: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/

Sau đó, cuối cùng, nó hoạt động !!


xin chào, tôi nghĩ rằng tôi đang gặp vấn đề với đường dẫn python không hoạt động vì cài đặt các số liệu thống kê PIL có hỗ trợ - JPEG. tuy nhiên, thực tế khi thực hiện opts với hình ảnh .jpeg gây ra lỗi jpeg bộ giải mã. stackoverflow.com/questions/18504835/ hy
Lucas Ou-Yang

16

Trên Fedora 17 tôi phải cài đặt libjpeg-develvà sau đó cài đặt lại PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL

1
Điều tương tự cũng xảy ra với RHEL / CentOS.
Jakub Roztocil

14

Câu trả lời của Rolo là tuyệt vời, tuy nhiên tôi đã phải cài đặt lại Gối bằng cách bỏ qua bộ đệm pip (được giới thiệu với pip 7) nếu không nó sẽ không được biên dịch lại đúng cách !!! Lệnh là:

pip install -I --no-cache-dir -v Pillow

và bạn có thể xem liệu Gối đã được cấu hình đúng chưa bằng cách đọc trong nhật ký này:

PIL SETUP SUMMARY
    --------------------------------------------------------------------
    version      Pillow 2.8.2
    platform     linux 3.4.3 (default, May 25 2015, 15:44:26)
                 [GCC 4.8.2]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    *** OPENJPEG (JPEG2000) support not available
    --- ZLIB (PNG/ZIP) support available
    --- LIBTIFF support available
    --- FREETYPE2 support available
    *** LITTLECMS2 support not available
    *** WEBP support not available
    *** WEBPMUX support not available
    --------------------------------------------------------------------

như bạn có thể thấy hỗ trợ cho jpg, tiff và vv được bật, vì trước đây tôi đã cài đặt các thư viện cần thiết thông qua apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)


Cảm ơn vì điều đó. Tùy chọn --no-cache-dir cũng giúp tôi
dranxo 14/07/2015

12

Trên Mac OS X Mavericks (10.9.3), tôi đã giải quyết vấn đề này bằng cách thực hiện như sau:

Cài đặt libjpeg bằng brew (hệ thống quản lý gói)

cài đặt libjpeg

cài đặt lại gối (tôi sử dụng gối thay vì PIL)

cài đặt pip -I gối


2
Điều này có thể là do một vấn đề riêng với việc cài đặt bia của tôi, nhưng tôi đã phải brew unlink jpeg && brew link jpegcài đặt Gối.
Lucas

11
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev

Cài đặt chúng và chắc chắn cài đặt PIL với pip vì tôi đã biên dịch nó từ nguồn và vì một số lý do, nó không hoạt động


Danh sách tất cả các phụ thuộc cần thiết .
Paolo

9

Tôi đã sử dụng Pillowvà nhận được cùng một lỗi. Đã thử cài đặt libjpeghoặc libjpeg-devtheo đề xuất của người khác nhưng được thông báo rằng phiên bản (mới hơn) đã được cài đặt.

Cuối cùng, tất cả những gì nó cần là cài đặt lại Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow

3

Tôi quá mới để nhận xét bài đăng của zeantsoi; (Vì vậy, đây là những gì tôi cần làm để giải quyết trên OSX vào ngày 10.9.1

IOError: bộ giải mã jpeg không khả dụng

1) cài đặt công cụ Xcode (mở thiết bị đầu cuối của bạn và thực thi xcode-select --install:) - lấy từ bài đăng này: Không thể cài đặt PIL sau Mac OS X 10.9

2) cài đặt gói libpng và libjpeg (trình cài đặt kết hợp) từ liên kết này: http://ethan.tira-thedom.com/Mac_OS_X_Ports.html

3) khởi động lại (không chắc chắn là bắt buộc)

4) Cài đặt lại PIL khi chạy pip install -I PIL(như tôi đã cài đặt PIL ban đầu trước khi gặp sự cố)

Hy vọng sự giúp đỡ này và đừng nhầm lẫn nhiều hơn ...

_Oh o


2

Câu hỏi này đã được đăng cách đây khá lâu và hầu hết các câu trả lời cũng khá cũ. Vì vậy, khi tôi dành hàng giờ cố gắng để tìm ra điều này, không có gì hiệu quả, và tôi đã thử tất cả các đề xuất trong bài viết này.

Tôi vẫn nhận được các lỗi JPEG tiêu chuẩn khi cố gắng tải lên JPG ở dạng hình đại diện Django:

raise IOError("decoder %s not available" % decoder_name)
OSError: decoder jpeg not available

Sau đó, tôi đã kiểm tra kho lưu trữ cho Ubuntu 12.04 và nhận thấy một số gói bổ sung cho libjpeg. Tôi đã cài đặt những thứ này và vấn đề của tôi đã được giải quyết:

sudo apt-get install libjpeg62 libjpeg62-dev

Cài đặt những loại bỏ libjpeg-dev, libjpeg-turbo8-devlibjpeg8-dev.

Hy vọng điều này sẽ giúp ai đó trong năm 2015 và hơn thế nữa!

Chúc mừng


1

Vấn đề tương tự ở đây, JPEG support availablenhưng vẫn có IOError: decoder/encoder jpeg not available, ngoại trừ tôi sử dụng Gối và không PIL.

Tôi đã thử tất cả các cách trên và hơn thế nữa, nhưng sau nhiều giờ tôi nhận ra rằng việc sử dụng sudo pip installkhông hoạt động như tôi mong đợi, kết hợp với virtualenv. Tôi thật ngốc.

Sử dụng sudohiệu quả để khởi chạy lệnh trong một shell mới (sự hiểu biết của tôi về điều này có thể không hoàn toàn chính xác) khi virtualenv không được kích hoạt, có nghĩa là các gói sẽ được cài đặt trong môi trường toàn cầu thay thế. (Điều này làm mọi thứ rối tung lên, tôi nghĩ rằng tôi đã có 2 bản cài đặt khác nhau của Gối.)

Tôi đã dọn dẹp mọi thứ, thay đổi người dùng thành root và cài đặt lại trong virtualenv và bây giờ nó hoạt động.
Hy vọng điều này sẽ giúp được ai đó!


1

Đối với Fedora

Cài đặt trước điều kiện tiên quyết
sudo dnf install make automake gcc gcc-c++ kernel-devel rpm-build libjpeg-devel zlib-devel python-devel
Bây giờ cài đặt Gối

sudo pip install pillow

Lưu ý - Đối với libjpeg và zlib, chúng tôi đang cài đặt các gói libjpeg-develzlib-devel trong Fedora / CentOS / Red Hat


0

Đầu tiên tôi phải xóa các thư mục python trong thư mục người dùng / appData ẩn (điều đó đang tạo ra những cơn đau đầu lớn), ngoài việc gỡ cài đặt Python. Sau đó, tôi đã cài đặt Phân phối WinPython: http://code.google.com.vn/p/winpython/ bao gồm PIL


4
Phát triển Python dưới cửa sổ là đau đớn. Tôi khuyên bạn không nên.
evilt Nam

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.