Не удается установить py2cairo на Mac OSX

Я пытаюсь установить py2cairo на сборку фреймворка (Mac OSX Lion) python 2.7.3, используя brew. Я пока безуспешно.

Сначала я попробовал простой

brew install py2cairo

Кажется, это работает только на нефреймворковой сборке Python. Когда я делаю это в своей структуре, возникают ошибки Python, как только я импортирую cairo с несовместимой двоичной ошибкой.

Во-вторых, я попытался собрать его сам, скачав его с github и выполнив:

python waf configure

Это не удается с:

Checking for library python2.7           : not found 
Checking for library python2.7           : not found 
Checking for library python2.7           : not found 
Checking for library python27            : not found 
Checking for program python2.7-config    : /usr/local/Cellar/python/2.7.3/bin/python2.7-   config 
Checking for header Python.h             : Could not find the python development headers 
The configuration failed
(complete log in /Users/tobin/tmp/py2cairo/build_directory/config.log)

Я пробовал все по адресу: Как установите PyCairo 1.10 на Mac OSX с Python по умолчанию, но ничего из этого не помогло.

Мне кажется, что это может привести к невозможности найти библиотеку и заголовочный файл python2.7, поскольку это сборка фреймворка. Это возможно? Я смотрел на формулу варки, и оказалось, что сборки фреймворка не получают --enable-share во время сборки. Я не уверен, что это уместно здесь, но, может быть, одна возможность.

Любые другие идеи были бы замечательными. Заранее спасибо.

ОБНОВИТЬ:

Я обнаружил, что невозможность собрать py2cairo связана с использованием флага "-march=native" в gcc. gcc (4.2.1) на Mac OSX имеет проблемы с этим. Затем я переустановил gcc и python. Впоследствии при сборке py2cairo с помощью waf он получал «-march=core2», и все строилось.

К сожалению, пока не все хорошо. Я получаю ту же ошибку, когда я импортирую cairo из моей сборки, которую я получил из версии brew (как упоминалось выше). Точное сообщение об ошибке:

>>> import cairo
Fatal Python error: Interpreter not initialized (version mismatch?)
Abort trap: 6

а затем python выходит.

Теперь может показаться, что проблема связана со сборкой фреймворка Python. Я протестировал его без сборки фреймворка, и он работал нормально.


person Rocketman    schedule 10.06.2012    source источник
comment
Похоже, что сборки фреймворка в конце концов являются общими сборками. Я проверил библиотеку python27, и это 64-битная динамически подключаемая общая библиотека Mach-O x86_64.   -  person Rocketman    schedule 10.06.2012
comment
Для справки, существует по крайней мере три различных типа сборок Python для OS X: неразделяемые, совместно используемые и фреймворковые (общие только для OS X). Возможно, вы захотите взглянуть на файл порта MacPorts для py27-cairo (macports.org/ports.php?by=name&substr=py27-cairo). MacPorts часто лучше справляется со сложными портами со многими зависимостями.   -  person Ned Deily    schedule 10.06.2012
comment
Я только что обнаружил, что waf получает CFLAGS от distutils python и используется флаг -march=native. Похоже, что установленная Apple версия gcc не работает с этим. По крайней мере, на моей машине это не так — я убедился в этом, попытавшись скомпилировать с его помощью очень простой файл. Все еще не ясно, где я могу это контролировать - или вообще отключить его.   -  person Rocketman    schedule 10.06.2012


Ответы (1)


Чтобы не оставлять этот вопрос в подвешенном состоянии ... Я хотел продолжить свое решение и пункты обучения:

  1. Как отмечалось выше, была несовместимость с моей версией OSX и флагом компиляции gcc под названием -march=native. В более поздней версии он появился как -march=core2. Это в значительной степени исправилось с изменениями компилятора/версии после очистки моей машины.

  2. В течение многих лет у меня был настоящий беспорядок со всеми моими различными установками MAC OSX - и я принимал «вариант миграции». Две машины назад - я установил бинарники python для версий 2.4 и 2.5. Затем по разным причинам перешел на macports. Потом в итоге перешел на доморощенный. Когда я перешел на хоумбрю, я пытался наводить порядок вручную (но, конечно, это может быть сложно). Что еще хуже, каждый раз, когда я получал новый Mac (2 раза) за последние 6 лет, я выбирал вариант «миграция установки», и это продвигало беспорядок вперед и усугубляло его. Итак, когда я начал изучать вещи дальше, у меня были разные установки python с разными версиями — mac-native, python-native, порты mac, homebrew и, возможно, даже другие в моей системе. Так что я думаю, что cairo каким-то образом нашел одну из них и пытался противостоять ей.

В конце концов я решил эту проблему, удалив кучу старых установок python вручную, а затем начав заново с новой установки virtualenv и homebrew python 2.7.

ПРЕДУПРЕЖДЕНИЕ: я не думаю, что это самый умный способ. Я был осторожен, чтобы не удалить версию Python, которая, как мне казалось, пришла с OSX Lion (я думаю, что это 2.6), но неясно, как это потенциально может повлиять на некоторые другие вещи, которые могли зависеть от более старых установок mac для python. В итоге я удалил 2.3, 2.4 и два разных 2.5 вместе с разными ссылками в некоторых местах. КАКОЙ БЕСПОРЯДОК! Если вы абсолютно не уверены в том, что делаете (чего я не был), я бы не стал предлагать этот подход. По сути, я пытался убить 6 лет накопленной ненужной информации об установке Python.

Чтобы быть в безопасности, я, вероятно, должен был начать с новой установки OSX Lion, а затем добавить свою доморощенную версию и перейти оттуда. Я, вероятно, сделаю это в ближайшее время.

person Rocketman    schedule 13.06.2012