PIL не будет импортировать модуль _imaging C: «*** Модуль _imaging C не установлен» - PullRequest
4 голосов
/ 06 ноября 2010

Немного фона из сборки PIL setup.py:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
              [GCC 4.3.3]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------

Это на установке Ubuntu 9.04.

Мне нужен только PIL, чтобы Django мог загружать и изменять размеры различных изображений (разных форматов). К сожалению, в настоящее время он не может обрабатывать JPEG. После выполнения PIL-файла selftest.py получилось следующее:

*** The _imaging C module is not installed

Я попытался импортировать Image и _imaging с помощью интерпретатора python -v (который работал) ...

>>> from PIL import Image
import PIL # directory PIL
# PIL/__init__.pyc matches PIL/__init__.py
import PIL # precompiled from PIL/__init__.pyc
# PIL/Image.pyc matches PIL/Image.py
import PIL.Image # precompiled from PIL/Image.pyc

[успешно продолжается довольно долго]

>>> import _imaging
dlopen("/usr/local/lib/python2.6/dist-packages/PIL/_imaging.so", 2);
import _imaging # dynamically loaded from /usr/local/lib/python2.6/dist-packages/PIL/_imaging.so

Таким образом, _imaging доступно при использовании интерпретатора python, но по некоторым причинам не импортируется должным образом в других случаях.

Я искал решения этой проблемы в течение последних нескольких часов и даже не приблизился к ее поиску. Я что-то упускаю глупо очевидное? Или есть идеи, почему это не работает?

Заранее спасибо!

Также: я знаю о http://effbot.org/zone/pil-imaging-not-installed.htm, но это только демонстрирует ошибку и не дает решения.

РЕДАКТИРОВАТЬ: Я слоняюсь вокруг, и кажется, что импорт _imagingmath является проблемой. Я сделал python -vv selftest.py, чтобы увидеть, где он ломался, и вот как это произошло:

dlopen("/usr/local/lib/python2.6/dist-packages/PIL/_imagingmath.so", 2);
import _imagingmath # dynamically loaded from /usr/local/lib/python2.6/dist-packages/PIL/_imagingmath.so
*** The _imaging C module is not installed
# clear __builtin__._
[etc. etc. etc.]

Ответы [ 3 ]

5 голосов
/ 08 ноября 2010

Кажется, что до того, как я установил PIL, у меня не было установленного libjpeg. Поэтому я установил libjpeg-62 и libjpeg62-dev, затем переустановил PIL. Произошла такая же ошибка

*** The _imaging C module is not installed

На другом сайте я нашел потенциальное решение, предполагающее принудительное восстановление PIL из источника:

sudo python setup.py build_ext -f

В результате появилось несколько интересных сведений об этой ошибке (если у вас тоже есть эта проблема). Кажется, что gcc не компилирует различные файлы должным образом (у меня есть gcc4.3.3), а именно следующее:

_imaging.c:3017: warning: initialization from incompatible pointer type
_imaging.c:3077: warning: initialization from incompatible pointer type
libImaging/Quant.c: In function 'rehash_collide':
libImaging/Quant.c:154: warning: cast to pointer from integer of different size

(все остальное вроде нормально)

Я провел небольшое исследование по этому вопросу, и некоторые другие веб-сайты предполагают, что это потому, что версия gcc, которую я использую для сборки PIL, отличается от версии, используемой для сборки Python python.org, который я использую. Это имеет много смысла. Вот еще один вопрос, который я нашел, который предполагает это .

Наконец, я попытался выполнить последнюю установку, но на этот раз из репозитория, а не из загруженного tar. Это, похоже, решило проблему.

sudo apt-get install python-imaging

Хотя я не до конца ответил на исходную проблему, я нашел альтернативное решение и надеюсь, что приведенная выше информация поможет кому-то еще в этой ситуации!

2 голосов
/ 09 сентября 2011

Я исправил это, установив разработку libjpeg:

sudo apt-get install libjpeg8-dev

Затем переустановите модуль PIL.

(я использую виртуальную среду, но она должна работать так же хорошо, как и Python, как стандартная)

0 голосов
/ 06 ноября 2010

Вы не установили библиотеку libjpeg. Сделайте это:

sudo apt-get install libjpeg

и перезапустите установку PIL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...