lxml
немного возмущен тем, какие сторонние библиотеки он использует, и ему часто нужны более новые версии, чем те, которые поставляются Apple. Предлагаем вам прочитать и следовать инструкциям здесь для сборки lxml
из исходного кода на Mac OS X, включая создание собственных статически связанных библиотек. Это должно работать. (Я немного удивлен, что у домашнего пивовара еще нет рецепта lxml.)
ОБНОВЛЕНИЕ: Исходя из ограниченной информации в ваших комментариях, трудно быть уверенным, что именно происходит. Я подозреваю, что вы не используете ту версию Python, о которой думаете. Есть много способов успешно установить lxml; это часть проблемы: слишком много вариантов. Вместо того, чтобы пытаться отлаживать ваши настройки, вот, пожалуй, самый простой способ получить работающий lxml на 10.7 с помощью системы Python 2.7, поставляемой Apple.
$ sudo STATIC_DEPS=true /usr/bin/easy_install-2.7 lxml
После этого вы сможете использовать lxml.etree
следующим образом:
$ /usr/bin/python2.7
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
>>> etree.__file__
'/Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so'
>>>
Я заметил, что процесс статической сборки lxml
не создает работающую универсальную сборку. Вероятно, вы увидите такие сообщения во время установки lxml
:
ld: warning: ignoring file /private/tmp/easy_install-83mJsV/lxml-2.3.1/build/tmp/libxml2/lib/libxslt.a, file was built for archive which is not the architecture being linked (i386)
Предполагается, что архитектура по умолчанию на вашем компьютере - 64-битная, если вы пытаетесь работать в 32-битном режиме:
$ arch -i386 /usr/bin/python2.7
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:06)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so, 2): Symbol not found: _htmlParseChunk
Referenced from: /Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so
Expected in: flat namespace
in /Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so
>>> ^D
И есть сообщение об ошибке, о котором вы изначально сообщили! Таким образом, основная причина этого заключается в том, что статические библиотеки (libxml2
и т. Д.), Которые строит lxml
, не являются универсальными. Пока вам не нужно использовать lxml
в 32-битном процессе (это маловероятно для большинства применений), это не должно быть проблемой. Скорее всего, Python, который вы изначально использовали, был 32-битным; это согласуется с некоторыми другими сообщениями, о которых вы сообщили.