ошибка модуля изображения C в python PIL
Я прочитал другие сообщения о пресловутой ошибке модуля _imaging C при установке PIL на Mac OS X, и ни одно из решений, предоставленных в любом месте, включая FAQ PIL, не оказалось полезным.
у меня есть новейшие версии libjpeg и zlib, недавно установленные из источника. Я отредактировал файлы Makefile в каждом из них, чтобы включить параметр-arch i386 в переменную LD_FLAGS для 32-разрядных сборок. PIL устанавливается без каких-либо проблем, и сводка установки печатается на терминал говорит, что поддержка JPEG, TIFF и PNG в порядке. После этого я пробую самотестирование:
new-host:Imaging-1.1.7 ely$ python selftest.py
*** The _imaging C module is not installed
это обычно видно по целому ряду причин. Исследуя глубже, здесь я пытаюсь импортировать _imaging непосредственно в python.
new-host:Imaging-1.1.7 ely$ python
ActivePython 2.7.1.4 (ActiveState Software Inc.) based on
Python 2.7.1 (r271:86832, Feb 7 2011, 11:33:10)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>> import _imaging
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart
Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/_imaging.so
Expected in: dynamic lookup
здесь снова "символ не найден: _jpeg_resync_to_restart" печально известен и распространен, и многие люди предположили, что это связано с неправильным путем к libjpeg. Я проверял снова и снова, и у меня есть только libjpeg (а также zlib, так далее.) установлен в моем домашнем каталоге, все в отдельных папках, из исходного кода, и все это правильно отмечено в файле setup.py.
таким образом, PIL должен получать поддержку jpeg (и zlib и т. д.) из правильных мест. Все зависимости установлены. Я вижу изображение.так что в моей системе.путь, но я все еще получаю эту ошибку _jpeg_resync_to_restart.
есть ли идеи, которые не связаны с альтернативными сообщениями? Я провел ~7 часов, читая и пробуя возможные решения из сообщения на всех форумах, которые я могу найти.
9 ответов
поскольку вы пробовали это несколько раз, я рекомендую запустить несколько команд, чтобы сначала очистить старые элементы и начать с самого начала.
я использовал jpeg v8c и Imaging 1.1.6 на Mac OS X, 10.6 и 10.7
вам v8c в формате JPEG компакт-диск в каталог в формате JPEG.
sudo make clean
CC="gcc -arch i386" ./configure --enable-shared --enable-static
make
sudo make install
получить изображение я использую 1.1.6
унтар cd в imaging
sudo rm -rf build
vi setup.py
JPEG_ROOT = libinclude(“/usr/local/lib”)
sudo python setup.py install
и это просто
запустите python переводчик,
import PIL
import _imaging
import Image
если все хорошо,то все готово.
вот Полная статья в моем блоге Python 2.7, OSX Lion, PIL и Imaging
я столкнулся с той же проблемой сегодня вечером на моем mac под управлением Mac OS X v10.7.5, Python v2.7.1 с изображением PIL 1.1.7 и jpeg 8d.
Резюмируя - ключ к успеху в моем случае было:
export ARCHFLAGS="-arch x86_64"
ничего из других ответов не решили проблему, постоянно я получаю:
The _imaging C module is not installed
вызвана:
Symbol not found: _jpeg_resync_to_restart
.
копать здесь и там, наконец, я нашел решение, по крайней мере, работает я:
-
убедитесь, что у вас нет очевидных libjpeg libs в системе:
find / -iname "libjpe*"
скажу вам это. Я временно изменил места, где они существуют, чтобы никто не мог их найти (особенно /sw взаимодействовал с PIL в моем случае):mv opt opt-OFF mv sw sw-OFF
эти местоположения были созданы портами mac и fink-будьте предупреждены, что вполне возможно, что FREETYPE2
не может быть найден PIL после этого хода - Если вам это нужно, то просто переименуйте части libjpeg в этих местах.
-
в каталоге PIL Imaging src редактировать setup.py как описано выше, чтобы установить JPEG_ROOT в /usr / local, попробуйте запустить:
rm -rf build ; python setup.py build 2> /tmp/err > /tmp/log
проверьте в / tmp / log-вы должны не см. доступную поддержку JPEG. Теперь вы можете перейти к следующему шагу.
-
перейдите в каталог jpeg-8d src и запустите:
export ARCHFLAGS="-arch x86_64" sudo make clean; CC="gcc -arch x86_64" ./configure --enable-shared --enable-static sudo make install
-
вернуться к Pil Imaging, выполните следующие команды:
export ARCHFLAGS="-arch x86_64" sudo rm -rf build ; python setup.py build 2> /tmp/err > /tmp/log
Check in / tmp / log-теперь вы должны увидеть "поддержка JPEG доступна", проверить / tmp / err-поиск "jpeg" - если вы видите что-то вроде этого:
ld: warning: ignoring file /usr/local/lib/libjpeg.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
- тогда флаги arch (как установленные ARCHFLAGS, так и - arch) не смогли вызвать-расследовать этот случай, это важно. Если вы этого не видите, то вам повезло, и вы можете вызвать установку:
export ARCHFLAGS="-arch x86_64"
sudo rm -rf build ; sudo python setup.py install
проверьте, работает ли ваш PIL:
python selftest.py
или
echo "import _imaging" | python && echo "Works"
надеюсь, это поможет.
проблема в том, что модуль _imaging связан с libjpeg динамически, а не статически. Код libjpeg не входит непосредственно в модуль _imaging. Это означает, что динамический компоновщик вашей платформы должен иметь возможность найти libjpeg, чтобы загрузить и связать его. Мои знания MacOS здесь нечеткие, но, насколько я помню, его динамический компоновщик называется dyld
, и его manpage может предоставить дополнительную информацию о параметрах, которые у вас есть.
нормально, платформа динамическая компоновщик не будет искать в вашем homedirectory библиотеки - но вы можете сказать это, например, установив DYLD_LIBRARY_PATH
переменная окружения или редактирование общесистемной конфигурации (если она есть.) Установка этой переменной среды обычно должна быть выполнена до запуска Python, поэтому она может быть не подходящей. Вы можете попытаться внедрить путь поиска во время выполнения в модуль расширения _imaging, что обычно делается путем передачи -rpath
к компоновщику -- но я не знаю, является ли MacOS линкер предлагает эту возможность. Наконец, вы можете просто построить libjpeg как static библиотека, а не общий, и имеют ссылку модуля _imaging против этого. Это позволит избежать всей ситуации с общей библиотекой для libjpeg. Для libjpeg, это, наверное, запустить его configure
скрипт --enable-static --disable-shared
.
Я пробовал многие из этих предложений (а также два других предложения в ссылочных блогах) на старой установке 10.6 Mac. Ни один из них не работал как есть, однако, читая за строками, я смог исправить свою проблему. Я добавил к PIL setup.py в find_include_file () прямо перед возвратом 1 строка "print os.путь.присоединиться(каталог, включить)". Это позволило мне отследить, против кого строит libjpeg PIL. Затем я бы построил PIL, нашел libjpeg, на который он ссылается (различные копии в /sw, / opt/, / usr / local/lib, ...), и удалите этот libjpeg (как заголовочные, так и lib-файлы).
наконец, с чистой системой, которую я построил и установил libjpeg source tarball, который я загрузил сам, а затем построил и установил PIL из источника. Это сработало. Как запасной вариант, вы всегда можете отключить libjpeg, удалив вышеуказанные файлы, как описано или всегда возвращая ноль из описанной выше функции в setup.py.
хорошо работает для меня на Mountain Lion 10.8.2:
Шаг Первый. Удаление всех пакетов jpeg. Для MacPorts:
sudo port -f uninstall jpeg
или sudo port -f uninstall jpeg @version_here
нужно удалить все jpeg версий!
Шаг Второй. Удалить PIL:pip uninstall PIL
Шаг Третий. Установите пакет jpeg еще раз. Для MacPorts:sudo port install jpeg
Шаг Четвертый. Снова установите пильный : pip install PIL
>>> import PIL
>>> import _imaging
нет ошибок!
Как удалить все пакеты jpeg?
$ port installed | grep -i jpeg
jpeg @8c_0
jpeg @9a_0 (active)
$ sudo port -f uninstall jpeg @8c_0
$ sudo port -f uninstall jpeg @9a_0
плевать dependies. Потому что нам нужно снова установить jpeg-пакет:
$ sudo port install jpeg
Я на ошибки вы, ребята, говорили. Я сломался и просто использовал virtualenv и установил подушку вместо этого. сработало:
sudo pip install virtualenv
virtualenv python_script && cd !$
. /activate/bin
pip install Pillow
у меня была та же проблема, с Python 2.7 и OSX Lion, и в основном следовал процессу @ApPeL и переустановил libjpeg и PIL. libjpeg, казалось, был установлен правильно, и PIL, казалось, нашел его правильно, но работает python -v
а то import _imaging
всегда давал эту ошибку:
ImportError: dlopen (/библиотека/фреймворки / Python.фреймворк / версии / 2.7 / lib / python2.7 / site-packages/PIL/_imaging.так что ... , 2): символ не найден: _jpeg_resync_to_restart
после установки и повторной установки libjpeg (версия 8d) и PIL (версия 1.1.7) двадцать раз с немного разными параметрами, что сделал трюк, убедившись, что я удалил все файлы libjpeg под / usr / local / include (заголовки), а также файлы под /user/local/lib.
мне не нужно было устанавливать PIL из источника, я использовал pip install pil
Это сработало для меня- http://www.thetoryparty.com/2010/08/31/pil-on-snow-leopard-_jpeg_resync_to_restart-error/
Я пытаюсь установить PIL (OS X 10.7.5, Python 2.7.3) около 5 часов. Я тоже увяз с ошибкой" символ не найден: _jpeg_resync_to_restart " и попробовал многие из предложенных решений безрезультатно, включая переустановку всех его зависимостей. Наконец, я обнаружил двойную кликабельную установку подушка.
спасибо Rudix! Теперь" import PIL "и" import _imaging " работают!
p.s. Я установил libjpeg via Я специально не удалял эту установку, поэтому я не уверен, было ли это частью окончательного решения или нет.