Ошибка импорта ft2font из matplotlib (python, macosx) - PullRequest
7 голосов
/ 21 сентября 2011

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

из mpl_toolkits.basemap import Basemap

Traceback (последний вызов был последним): файл "", строка 1, в файле "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/mpl_toolkits/basemap/init .py ", строка 36, из matplotlib.collections импортировать файл LineCollection File" /usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/collections.py ", строка22, в импорте matplotlib.backend_bases в виде файла backend_bases "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/backend_bases.py", строка 38, в импорте matplotlib.widgets какФайл виджетов "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/widgets.py", строка 16, из строки импорта файла Line2D "/ usr / local / Cellar /python / 2.7.2 / lib / python2.7 / site-packages / matplotlib / lines.py ", строка 23, из matplotlib.font_manager import FontProФайл perties "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/font_manager.py", строка 52, из matplotlib import ft2font ImportError: dlopen (/ usr / local /Cellar / python / 2.7.2 / lib / python2.7 / site-packages / matplotlib / ft2font.so, 2): символ не найден: _FT_Attach_File Ссылка на: /usr/local/Cellar/python/2.7.2/lib/python2.7 / site-packages / matplotlib / ft2font.so Ожидается в: динамический поиск

Поэтому, когда я попытался импортировать ft2font в python с помощью:

из matplotlib import ft2font

Я получил эту ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/ft2font.so, 2): Symbol not found: _FT_Attach_File
  Referenced from: /usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/matplotlib/ft2font.so
  Expected in: dynamic lookup

Есть идеи, что делать?Я использую Mac OSX 10.6 и python 2.7.2, установленные homebrew.

Ответы [ 3 ]

6 голосов
/ 23 августа 2012

Я столкнулся с той же проблемой. Даже после запуска make.osx он все еще жаловался на неопределенность _FT_Attach_File, когда я импортировал ft2font из matplotlib. Вот как я выследил проблему. Надеюсь, это поможет кому-то еще.

Бег otool -L ft2font.so уступил:

    ft2font.so:
/Users/jbenuck/mpl_build/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

Обратите внимание на отсутствие каких-либо упоминаний о libfreetype! Как ft2font.so должен найти символ, если он не связан с ним?

Мой следующий шаг - захват команд, использованных во время сборки:

    make -f make.osx PREFIX=/usr/local clean fetch deps mpl_build > output.txt

В результате поиска была получена команда, которая использовалась для компиляции модуля python, работающего с ошибками. Я изменил значение выходного файла на один в моем локальном каталоге и запустил его:

/ Разработчик / usr / bin / llvm-g ++ - 4.2 -bundle -undefined dynamic_lookup -isysroot / -L / opt / local / lib -arch i386 -arch x86_64 -L / usr / local / lib -syslibroot, / Developer /SDKs/MacOSX10.7.sdk -arch i386 -arch x86_64 -I / usr / local / include -I / usr / local / include / freetype2 -isysroot /Developer/SDKs/MacOSX10.7.sdk build / temp.macosx- 10.7-x86_64-2.7 / src / ft2font.o build / temp.macosx-10.7-x86_64-2.7 / src / mplutils.o build / temp.macosx-10.7-x86_64-2.7 / CXX / cxx_extensions.o build / temp.macosx -10.7-x86_64-2.7 / CXX / cxxsupport.o build / temp.macosx-10.7-x86_64-2.7 / CXX / IndirectPythonInterface.o build / temp.macosx-10.7-x86_64-2.7 / CXX / cxxextensions.o -L / usr / local / lib -L / usr / local / lib -L / usr / lib -L / usr / X11 / lib -lfreetype -lz -lstdc ++ -lm -o ft2font.so

ld: предупреждение: игнорирование файла /opt/local/lib/libfreetype.dylib, файл создан для неподдерживаемого формата файла, который не связан с архитектурой (x86_64)

Бинго! Проблема найдена. Я знаю, что у меня установлены как macports, так и homebrew. По-видимому, одна из них имеет версию libfreetype в /opt/local/lib, которая не скомпилирована для 64-битной версии.

Я перезапустил команду с удаленным "-L /opt/local/lib", который работал без предупреждения. Копирование полученного ft2font.so в мою существующую установку matplotlib теперь позволяет мне успешно импортировать ft2font из matplotlib.

5 голосов
/ 03 октября 2012

В моем случае это была проблема архитектуры - у меня была установлена ​​64-битная версия freetype (с которой счастливо скомпилирован matplotlib), но когда я запустил 32-битную версию python, я получил эту ошибку. Простое решение - удалить все (freetype, matplotlib), а затем установить 32- и 64-разрядные версии, используя homebrew и флаг --universal:

brew install freetype --universal

Обратите внимание, я также должен был сделать это и для libpng (brew install libpng --universal). Не все домашние рецепты поддерживают универсальный флаг, но это огромная помощь для тех, кто делает. (Вы можете увидеть параметры формулы с brew info <FORMULA>).

Кроме того, полная компиляция с использованием make-файла make.osx в сочетании с homebrew; по своему опыту я бы порекомендовал один или другой.

4 голосов
/ 22 сентября 2011

Хорошо, я понял это.

Я переустановил matplotlib из источника из github (https://github.com/matplotlib/) и затем (вместо обычной установки python setup.py) я запустил make.osx, описанный в README.OSX:

make -f make.osx PREFIX=/devjunk PYVERSION=2.7 \
  clean fetch deps mpl_install_std

И теперь все работает правильно.

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